开发者问题收集

防止调用函数

2011-12-18
8691

我有两部分脚本。


Part 1 :
$("mySelector").click(function() {
     alert('you call me');
})

Part 2 :
$("mySelector").click(function() {
     if(myCondition) {
          //how can i prevent calling the first function from here ???
     }
})

整个问题是 我无法访问第 1 部分 。因此,如果 myCondition 为真,我需要解除第 1 部分中已指定的事件的绑定,否则我需要调用第一个函数。

谢谢

更新:

谢谢。我不知道 stopImmediatePropagation()。但我觉得,一定有类似的东西 :)

但实际上,就我而言,它不起作用 :(

请查看我的网站 http://www.tours.am/en/outgoing/tours/%D5%80%D5%B6%D5%A4%D5%AF%D5%A1%D5%BD%D5%BF%D5%A1%D5%B6/Park-Hyatt-Goa/

酒店描述 选项卡下,我有云旋转木马,当我单击非活动图像(不是正面图像)时,如您所见,我正在安慰自己,我在那里停止了立即传播(),但是事件却调用了:(

3个回答

如果您的处理程序是先注册的,那么您可以像这样使用 event.stopImmediatePropagation

$("mySelector").click(function(event) { 
     if(myCondition) { 
          event.stopImmediatePropagation();
     } 
}) 

请注意,这 也会 停止事件冒泡,因此它还会阻止调用父元素上的 click 处理程序。

更新: 如果这不起作用,那么您的处理程序将附加在您想要控制的处理程序之后。这个问题使解决方案变得更加困难。我建议看看您是否可以“在另一个人之前”绑定,否则您将不得不解除现有处理程序的绑定,然后通过保留对它的引用从您自己的处理程序中有条件地调用它。请参阅 jQuery 查找使用对象注册的事件处理程序

Jon
2011-12-18

无访问权限:

$("#mySelector").click(function() {
     alert('you call me');
})

访问:

var myCondition = true, //try false too
    fFirstFunction = $("#mySelector").data("events").click[0].handler;
$("#mySelector").unbind("click");
$("#mySelector").click(function() {
    if(myCondition) {
        alert(myCondition);
    } else {
        $("#mySelector").click(fFirstFunction);
    }
});

查看 示例

noob
2011-12-18

您可以调用

$('mySelector').unbind('click');

来摆脱 所有 点击处理程序。如果您的脚本是在另一个脚本之后加载的(看起来是这样),那么应该可以做到这一点。但请注意,它会解除所有“点击”处理程序的绑定,因此请确保在添加您自己的处理程序之前调用它。

Pointy
2011-12-18