Jquery $(селектор).ready() работает, даже если ни один элемент не был сопоставлен

67
5

Я использую этот код для запуска этого js только на определенных страницах.


$("body#action_new").ready(function() {
console.log($("body#action_new"));
console.log($("body#action_new").length);
console.log("code is running");
}

Хотя тело # action_new не существует, код работает.


выводятся два файла console.logs:


[]
0
code is running

Что дает?

спросил(а) 2012-01-31T11:28:00+04:00 8 лет, 6 месяцев назад
1
Решение
110

Вы не можете вызвать ready кроме документа, вы можете попробовать


$(document).ready(function(){

if($("#action_new").size()>0){
console.log($("body#action_new"));
console.log($("body#action_new").length);
console.log("code is running");
}

});

Как указано @Interrobang в комментариях, метод .size() внутренне использует .length, поэтому рекомендуется использовать .length, чтобы избежать дополнительных накладных расходов на вызов функции, поэтому приведенный выше код будет выглядеть как


if ($("#action_new").length > 0){

ответил(а) 2012-01-31T11:31:00+04:00 8 лет, 6 месяцев назад
124

Вы не можете вызывать .ready() только на документе. Вы получите поведение undefined в любом другом случае.


Метод .ready() может быть вызван только для объекта jQuery, соответствующего текущему документу, поэтому селектор можно опустить.


http://api.jquery.com/ready/

ответил(а) 2012-01-31T11:29:00+04:00 8 лет, 6 месяцев назад
55

Можно вызвать ready() на селекторе. Вам просто нужно это: https://github.com/Verba/jquery-readyselector

ответил(а) 2015-06-29T21:01:00+03:00 5 лет, 1 месяц назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема