防止调用函数

时间:2011-12-18 14:07:53

标签: javascript jquery

我有两部分脚本。


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 ???
     }
})

整个问题是我无法访问part1 。所以我需要取消绑定第1部分中指定的事件,如果myCondition为true,否则我需要调用第一个函数。

由于

更新

谢谢。我不知道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 个答案:

答案 0 :(得分:1)

无法访问:

$("#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);
    }
});

查看this示例

答案 1 :(得分:1)

你可以打电话

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

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

答案 2 :(得分:1)

如果您无法确保首先附加处理程序,请尝试以下代码:

var events = $('mySelector').data("events");   //all handlers bound to the element
var clickEvents = events ? events.click : null;//all click handlers bound to the element
$('mySelector').unbind('click');               //unbind all click handlers
//bind your handler
$("mySelector").click(function(e) {
   if (myCondition) {
      //do what you want
   } else {
      //call other handlers
      if (clickEvents) {
          for (var prop in clickEvents)
              clickEvents[prop].call(this, e);
      }          
   }
})

<强>更新

  • 上面的代码适用于jQuery 1.3.2
  • 以上代码基于jQuery 1.3.2的内部实现,因此请在更新jQuery后仔细检查。