jQuery.off()没有删除绑定

时间:2012-01-15 07:55:49

标签: javascript jquery

出于某种原因,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
        });
      });
    })();
  }
});

2 个答案:

答案 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");