我试图在函数调用上覆盖jQuery confirmOn,这是我的代码
function MYConfirm(questionText, textYes, textNo) {
var retData = null;
$('#co').confirmOn({
questionText: questionText,
textYes: textYes,
textNo: textNo
}, 'click',function (e, confirmed) {
retData = confirmed;
});
$.Deferred($('#co').click());
$('#co').promise().done(function () {
alert(retData);
});
while (retData === null) {
}
return retData;
}
但我得到了这个例外
Object [object Object]没有方法'call'
答案 0 :(得分:2)
$.Deferred
的参数必须是函数。您正在调用click
函数而不是将其作为参数传递。它应该是:
$.Deferred($("#co").click);
但我不确定你对这段代码的意图。当$.Deferred
调用该函数时,它会设置this
和Deferred
对象的第一个参数。但是.click()
期望它的参数是一个事件处理函数,它作为元素的单击处理程序绑定。如果你没有在某处分配值,那么调用$.Deferred
也没什么意义,所以你可以为它添加回调并等待它们被执行。
答案 1 :(得分:0)
从confirmOn中读取documentation,您需要将警告声明放入'点击'回调,即
$('#co').confirmOn({
questionText: questionText,
textYes: textYes,
textNo: textNo
}, 'click',function (e, confirmed) {
retData = confirmed;
alert(retData);
});
通过绑定$('#co')。click(),您将触发事件,因为元素是单击本身而不是确认。