У меня есть этот простой код jQuery
function removePreloader() {
jQuery('ul.woocommerce-error').has('li').jQuery("#preloader").css("display", "hidden");
}
и это вызывается
jQuery('form[name = "checkout"]').submit(function(e) {
... // lots of line
setTimeout(removePreloader(), 2000);
}
оба блока кодов внутри jQuery(document).ready(function() { ... });
другой jQuery() работает нормально, только этот вызывает проблемы и показывает
Uncaught TypeError: jQuery(...).has(...).jQuery is not a function
нельзя ли использовать .has? или есть альтернатива? потому что эта тема WordPress использует много старых плагинов, поэтому они не могут принять более новую версию jQuery.
Спасибо
вот скриншот из jquery.com
Я просто пытаюсь следовать этому javascript и немного изменил его, пожалуйста, дайте мне знать, как это сделать правильно, потому что я никогда раньше не кодировал javascript.
какая у вас версия jquery? .началась в 1.4 - похоже, они пытаются что-то скрыть, когда возникает ошибка woo commerce
Случайный jQuery в этой строке: ....has('li').jQuery("#preloader").css(... вызывает проблему. Что вы ожидаете от него? Вы имели в виду find() вместо этого?
Я хочу, чтобы preloader исчез, когда к ul.woocommerce-error добавляется ошибка, ошибка будет в теге li, поэтому я хочу, чтобы если ошибка woocommerce имеет дочерний элемент li, то отображение div предварительного загрузчика скрыто



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Uncaught TypeError: jQuery(...).has(...).jQuery is not a function
означает, что .jQuery не является функцией возвращаемого объекта .has(). Это также означает, что .has() здесь работает отлично. Вместо этого попробуйте использовать .найти().
@Pete неправда, has() возвращает объект jQuery
@ Пит Нет? он возвращает объект jquery Description: Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element.
Привет, я хотел попробовать использовать ваше решение, find() также возвращает логическое значение?
@KhrisnaGunanasurya Нет. .find() возвращает согласованный набор элементов точно так же, как это делает jQuery(), и, возможно, именно то, что вы ожидали здесь.
Вы используете неверный оператор jQuery .jQuery..., я бы предложил использовать оператор if при проверке наличия в списке дочерних элементов li, например:
function removePreloader() {
if ( jQuery('ul.woocommerce-error li').length ){
jQuery("#preloader").css("display", "none");
}
}
Свойство ПРИМЕЧАНИЕ 1:display не имеет значения hidden, поэтому вместо этого вы ищете none.
ЗАМЕТКА 2: Удалите () в вызове функции, например:
setTimeout(removePreloader, 2000);
Я только что попробовал использовать ваше решение, но оно не работает, я даже поставил alert(), чтобы убедиться, что условие if верно, и, поскольку оно не работает, я вношу изменения в это jQuery('ul.woocommerce-error li').length > 0, но все равно не повезло
добавьте предупреждение перед if, чтобы убедиться, что removePreloader() достигнуто.
setTimeout(removePreloader(), 2000); вместо этого должно быть setTimeout(removePreloader, 2000);, обратите внимание на удаление ()ах, я вижу, здесь я ошибаюсь, поэтому это не работает, спасибо
Это неверный оператор jQuery
jQuery('ul.woocommerce-error').has('li').jQuery("#preloader").css("display", "hidden");чего вы хотите добиться?