为什么jquery为不存在的选择器执行代码

时间:2012-10-25 19:17:18

标签: jquery jquery-ui datepicker

我想知道jquery的执行情况。假设我有一个不存在的ID,为什么jquery仍然尝试执行该部分代码:

$(function() {
        $( "#datepicker_doesnotexist" ).datepicker({
         defaultDate: new Date(date_var)   
        });
    });

在这种情况下,它抱怨date_var未定义。这是可以理解的,我可以进行检查以防止这种情况等。

我想知道为什么jQuery执行这部分代码,如果该ID(datepicker_doesnotexist)不存在。如果它无论如何都无法绑定到元素上,那么这样做效率似乎非常低效。

一个例子: http://jsfiddle.net/CdE3k/

3 个答案:

答案 0 :(得分:3)

您尚未初始化 date_var 。这应该可以阻止抛出错误

 $(function() {
    var date_var = new Date( 2012, 10, 25 );

    $( "#datepicker_doesnotexist" ).datepicker({
        defaultDate: date_var   
    });
 });

如果没有找到具有匹配ID的元素,jQuery将返回一个没有元素的jQuery对象。 返回的jQuery对象上的datepicker方法仍然被调用,但它没有任何html元素可供使用。

这实际上是一件好事。如果jQuery在没有元素与ID匹配时返回undefined,则上面的代码会抛出错误。

答案 1 :(得分:1)

{defaultDate: new Date(date_var)}只是传递了一些论证,而不是函数本身。

与做:

相同
function someFunction(date) {

}

// this will result in an error because it is not defined. Same things happens in your code.
someFuntion(undefinedVariable);

简单地说date_var尚未定义(例如页面加载),但您正在尝试使用它。

答案 2 :(得分:0)

编辑:它正在发生,因为你正在将一个对象传递给该函数.datepicker(),并且它将对象作为传入对象的一部分进行评估。这就是预期的行为。