即使没有匹配的元素,jquery $(selector).ready()代码也会运行

时间:2012-01-31 08:28:07

标签: javascript jquery

我正在使用此代码仅在某些页面上运行此js。

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

即使body#action_new不存在,代码仍在运行。

两个console.logs打印出来:

[]
0
code is running

是什么给出了?

3 个答案:

答案 0 :(得分:9)

除了文档之外,您无法调用.ready()。在任何其他情况下,您将获得未定义的行为。

  

.ready()方法只能在与当前文档匹配的jQuery对象上调用,因此可以省略选择器。

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

答案 1 :(得分:7)

除文档外,您无法调用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){

答案 2 :(得分:1)

可以在选择器上调用ready()。您只需要:https://github.com/Verba/jquery-readyselector