jQuery UI onClose调用函数

时间:2013-04-30 21:51:23

标签: jquery jquery-ui

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

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

我正在尝试在datepicker关闭时调用DoStuff。我的控制台显示“关闭”,但不显示“DoStuff”。我做错了什么?

3 个答案:

答案 0 :(得分:3)

$(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();

答案 1 :(得分:1)

嗯,你不是在说它

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

并且DoStuff未附加到$(this),因此它也无效,我希望看到您的代码所没有的扩展。

所以它应该是

DoStuff();

DoStuff.call($(this));

答案 2 :(得分:1)

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

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

function doStuff(el) {
  console.log('DoStuff called. Received element:');
  console.log(e);
}