出于某种原因,jQuery.off('click')似乎没有在这里工作。当在模型中单击“是”按钮时,会弹出另一个模型。我做错了什么?
代码:
$(function(){
//If there are warnings on the page bind alert
if ($('.renewal-warning').length > 0){
(function (){
$('#signRentalContainer').on('click', '.renewal-warning', function(e){
var buttonHandle = this;
//Prevent submission
e.preventDefault();
//Show warning model
$.modal({
content: $('#renewalWarning').html(),
title: "Order Renewal Warning",
buttons: {
'Yes': function(win) { $(buttonHandle).off('click').click(); },
'No': function(win) { win.closeModal(); }
},
maxWidth: 250,
closeButton: false
});
});
})();
}
});
答案 0 :(得分:10)
非常确定你需要提供相同的元素,以及相同的选择器。
$('#signRentalContainer').off('click', '.renewal-warning');
在.on()
处理程序中,this
是被点击的'.renewal-warning'
元素,而不是#signRentalContainer
元素。
如果有多个'.renewal-warning'
元素,并且您只想一次禁用一个元素,最简单的方法是更改其类,使其不再与选择器匹配。
$(this).removeClass('renewal-warning')
.addClass('renewal-warning-disabled');
答案 1 :(得分:3)
因为this
引用句柄函数的上下文,而不是函数本身。
尝试将其设为命名函数,然后在调用off
时参考它:
$("body").off("click", '#signRentalContainer', buttonHandle);
BTW,我们不能直接在这里使用unbind
的任何理由?
$("#signRentalContainer").unbind("click");