2

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

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

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

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

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

4

3 回答 3

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,则上面的代码将引发错误。

于 2012-10-25T19:36:06.920 回答
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尚未定义(例如页面加载),但您正在尝试使用它。

于 2012-10-25T19:21:55.167 回答
0

编辑:它的发生是因为您将一个对象传递给该函数 .datepicker() 并且它评估该对象作为传递对象的一部分。所以这是预期的行为。

于 2012-10-25T19:21:35.137 回答