我有一个操纵谷歌地图的工具栏。某些功能会影响放置在地图上的标记。我有一个重置按钮,清除更改并将地图返回到原始状态。
我需要“禁用”重置按钮,直到地图发生变化。所以......
但是,我无法让第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();
没有成功。我做错了什么?
答案 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();
});
...因为函数引用不一样。