2015-02-05 3 views
0

Im работает внутри каркаса opencart. Базовая установка имеет тот же самый код, но мой, похоже, не работает. Я не вижу никаких ошибок.JQuery селектор не вытягивает текст

Im unsure, как заставить мои селекторы работать в jquery. Когда выполняется приведенный ниже код, он не находит текст в промежутке. Он возвращает пустое поле оповещения. Я что-то делаю неправильно или что-то не хватает?

alert($('#cart-total').text()); 

<button type="button"><span id="cart-total" ><?php echo $text_items; ?></span></button> 

functions.min.js -> линия 197

Если Youd хотел бы видеть его в действии: http://oc1.theaamgroup.com/ Нажмите добавить в корзину и смотреть.

UPDATE: Я добавил новую строку, чтобы помочь в процессе отладки. Когда вы нажмете кнопку «Добавить в корзину», появится окно с предупреждением о том, что вы выбрали селектор jquery для # cart-total, а затем то, что он должен был найти.

вещи я пытался:

  • Изменение версии JQuery

  • Перемещение файла функции для загрузки перед другими файлами

  • (Селектор работает, когда его не внутри функции файл для некоторые причина.)

  • Такие же селекторы в верхней части е functions.min.js файл

  • Same селекторы в нижней части functions.min.js файла

  • Вы можете запустить команду в хромированной консоли и она отлично работает.

  • Несколько селекторов css.

UPDATE 2 В конце functions.min.js линии 498 я добавил оповещения ($ ('# ломовая общий') текст().); чтобы показать, что по какой-либо причине корзина-сумма ничего не возвращает даже при ее запуске (по умолчанию, если в вашей корзине нет товаров) 0 товар (ов) - 0,00 руб.

+0

Привет Джон, ваш Код jQuery верен! Вы уверены, что установлена ​​переменная $ text_items? –

+0

@WilliamJanoti Фрагмент кода работает, но страница, на которую он ссылается, не является. Нажмите «Добавить в корзину» на любом элементе, и вы увидите пустое сообщение об ошибке. –

+0

И вот что я не могу понять, почему он не работает на этой странице. На странице нет ошибок или предупреждений. –

ответ

4

Вы должны ждать, пока корзина не была полностью обновлена, и что не произойдет до тех пор, после того, как событие .load. Попробуйте обновить линию 205 functions.min.js с функцией обратного вызова следующим образом:

$('#cart > ul').load('index.php?route=common/cart/info ul li',function(){ 
    alert('#cart-total inner text is: '+$('#cart-total').text()+'\n\n#cart-total inner text should be: '+json['total']); 
}); 

Таким образом, все содержимое на месте, когда вы пытаетесь получить значение $ («# ломовой общий») .текст();

Более подробная информации о .load можно найти здесь: http://api.jquery.com/load/

+0

Ваш селектор в порядке. Попробуйте переместить эту последнюю строку внутри своей готовой функции, и она, вероятно, сработает. Вероятно, нагрузка на страницу не существует. – ReLeaf

+0

Забавно, что вы сказали, что это не сработало, потому что я могу изменить JS-файл в инструментах Chrome DEV, сохранить его и увидеть, что оно выдает правильное значение. http://cl.ly/image/2X2x0X1G0S30 – ReLeaf

+0

Я отменил свое предыдущее заявление. Я был неправ, что он не работает. Можете ли вы объяснить мне, почему это работает, потому что я не ясно. Не было бы ('# cart-total'). Text() все еще есть то, что сейчас находится в поле? –

-1

Только сценарий, на который вы ссылаетесь в своем вопросе, работая для меня. Но пойти немного дальше, я осмотрел вашу страницу, которую вы связаны и увидели, что у вас есть функция, которая выглядит следующим образом:

if (json['success']) { 
    $('#content').parent().before('<div class="alert alert-success"><i class="fa fa-check-circle"></i> ' + json['success'] + '<button type="button" class="close" data-dismiss="alert">&times;</button></div>'); 

    $('#cart-total').html(json['total']); 
    alert($('#cart-total').text()); 
    $('html, body').animate({ 
    scrollTop: 0 
    }, 'slow'); 

    $('#cart > ul').load('index.php?route=common/cart/info ul li'); 
} 

Вы меняете HTML в #cart-total, так почему вы хотите, чтобы принести текст снова, если вы уже установили его с переменной? Просто выполните следующие действия и изменения alert($('#cart-total').text()); в alert(json['total']);

Как так:

if (json['success']) { 
    $('#content').parent().before('<div class="alert alert-success"><i class="fa fa-check-circle"></i> ' + json['success'] + '<button type="button" class="close" data-dismiss="alert">&times;</button></div>'); 

    $('#cart-total').html(json['total']); 
    alert(json['total']); 
    $('html, body').animate({ 
    scrollTop: 0 
    }, 'slow'); 

    $('#cart > ul').load('index.php?route=common/cart/info ul li'); 
} 
+0

Я добавил предупреждение для тестирования. Его не обновлять поле –

0

пока не могу комментировать ...Так что это не полный ответ, но я полагаю, что ОП абстрактную из проблемы в JSfiddle как так

http://jsfiddle.net/31c2zb0u/1/

Кроме того, все эти уродливых разметки не является необходимым для вопроса, и отвлекается с точки зрения.

<button type="button" onClick="cart.add('1274');"><i class="fa fa-shopping-cart"></i> <span class="hidden-xs hidden-sm hidden-md">Add to Cart</span></button>

Это вся информация, которая будет необходима из приведенного выше HTML.

<button onClick="cart.add('1274');"><span style='display: none'>Add to Cart</span></button>

1

Вы загружаете #cart после успешного запроса, чтобы вы могли обновить текст после извлечения содержимого с обратным вызовом

$('#cart > ul').load('index.php?route=common/cart/info ul li', function(){ 
    $('#cart-total').text(json['total']); 
});