函数运行后jQuery unbind行为

时间:2010-09-30 15:32:07

标签: jquery

我有一个操纵谷歌地图的工具栏。某些功能会影响放置在地图上的标记。我有一个重置按钮,清除更改并将地图返回到原始状态。

我需要“禁用”重置按钮,直到地图发生变化。所以......

  1. 当操作完成操作地图时,我将ResetMap()函数绑定到重置按钮。
  2. 单击“重置”按钮并将地图恢复为原始状态。
  3. 重置按钮操作再次解除绑定。
  4. 但是,我无法让第3步工作。我尝试在ResetMap()函数结束时取消绑定事件,如下所示:

    function ResetMap(){
     var Wrapper = $("#page_layout").find("#InlineToolbarMessages");
     if(Wrapper.hasClass('isExpanded')){
      Wrapper.removeClass('isExpanded');
      Wrapper.addClass('isCollapsed');
     }
     $("#page_layout").find('#NumSelectedNumber').html("0");
     $("#page_layout").find('div#SelectedVoters').html("");
     clearMarkers();
     $('#page_layout').find('#reset_button').unbind('click', function(){
      ResetMap();
     });
    }
    

    我也尝试了更全面的:

    $('#page_layout').find('#reset_button').unbind();
    

    没有成功。我做错了什么?

1 个答案:

答案 0 :(得分:2)

修改:根据你的评论“......在[你]调用`ClearMarkers()`之前发现如果[你]做$('#reset_button').unbind('click');它起作用的功能。同样在另一个不同按钮的功能中,[你]将unbind放在开头就行了。“

这让我觉得要么A)前面的代码抛出异常,完全阻止你进入unbind调用,或者B)之前的代码是删除reset_button按钮或添加另一个具有相同ID (这将使文档无效并且ID选择器的行为不确定)。


原始答案

更改

$('#page_layout').find('#reset_button').unbind('click', function(){
    ResetMap();
});

$('#page_layout').find('#reset_button').unbind('click', ResetMap);

...假设您在ResetMap电话中使用了bind。由于您尚未显示bind,因此很难确定。

当您使用函数引用调用unbind时,它必须是您提供的{em>完全相同的函数引用 bind(或bind之一快捷方式,click等。

因此,例如,这有效:

// Binding
$("#myElement").bind("click", myFunction);

// Unbinding
$("#myElement").unbind("click", myFunction);

...但不起作用

// Binding
$("#myElement").bind("click", function() {
    myFunction();
});

// Unbinding
$("#myElement").unbind("click", function() { // <== Does not work
    myFunction();
});

...因为函数引用不一样。