-3
$('#myElement').datepicker(
    {
        dateFormat: 'yy-mm-dd',
        onClose: function() { 
            $(this).DoStuff;
            console.log('close');
        },
        beforeShowDay: nationalDays,
        minDate: new Date()
    }
);

function DoStuff() {
    console.log('DoStuff');
}

当日期选择器关闭时,我正在尝试调用 DoStuff。我的控制台显示“关闭”,但不显示“DoStuff”。我究竟做错了什么?

4

3 回答 3

4

$(this).DoStuff不会调用对象DoStuff上的函数$(this),而是尝试访问对象的DoStuff属性$(this)。在您的情况下,它什么也不做:它将被解析为未定义,并且由于访问属性很可能没有副作用,因此什么也不会发生。

由于您的问题非常基本,我很确定存在误解,但这是您调用该DoStuff函数的方式:

DoStuff();

所以这就足够了:

$('#myElement').datepicker(
    {
        dateFormat: 'yy-mm-dd',
        onClose: function() { 
            DoStuff();
            console.log('close');
        },
        beforeShowDay: nationalDays,
        minDate: new Date()
    }
);

编辑

实际上,如果您想在 jQuery 对象上调用一个函数(尽管我不确定您是否真的想这样做),您可以像这样扩展该对象:

jQuery.fn.DoStuff = function() {
    console.log('DoStuff');
}

然后你就可以打电话了$(this).DoStuff()。这种方式this将是您函数中的 jQuery 对象,请检查:

jQuery.fn.DoStuff = function() {
    console.log(this);
    console.log(this[0]); //the first (and in this case the only) element selected by the selector
}

$('#myElement').DoStuff();
于 2013-04-30T21:53:39.693 回答
1

好吧,你不叫它

$(this).DoStuff; <-- missing the ()

并且DoStuff没有附加,$(this)所以它也不起作用,我希望看到你的代码没有的扩展。

所以应该是

DoStuff();

或者

DoStuff.call($(this));
于 2013-04-30T21:54:33.587 回答
1

$(this).DoStuff()暗示DoStuff()是对象的成员函数,似乎并非如此。

您应该doStuff($(this));改为进行修改doStuff()以接受参数。

function doStuff(el) {
  console.log('DoStuff called. Received element:');
  console.log(e);
}
于 2013-04-30T21:55:23.450 回答