0

我有一堆元素class="pageOpener"通过一些页面取得了进展。他们.on('click', ... )附加了 jQuery 事件。在某个页面上,我想在继续之前验证一些输入,这样它就有了id="continuebutton"自己的点击监听器。我想如果我愿意的话,我可以以某种方式从特定于 id 的事件中取消类范围的事件,但我还不能管理它。我认为问题之一是类事件在 id 之前触发(之前已附加)。

有没有办法让 id 事件首先触发?我想按此顺序保留我的代码,但如果唯一的方法是将其放在id.on('click', ... )之前,class.on('click', ... )那么我可以这样做。

那么停止类事件触发的正确方法是什么?返回真?

4

3 回答 3

1

文档中.on()

但是,附加在当前元素上的任何其他处理程序都将运行。为防止这种情况,请致电event.stopImmediatePropagation(). (绑定到元素的事件处理程序的调用顺序与它们绑定的顺序相同。)

您需要首先绑定基于 id 的click事件处理程序(因此它首先运行),并event.stopImmediatePropagation()在其函数内部调用以阻止其他基于类的click事件处理程序被执行。

于 2013-02-20T14:37:56.993 回答
1

如果您不能依赖以某种方式对代码进行结构化/绑定,或者如果有人稍后更改它而不知道此要求,则结构/序列更改将破坏它。我使用自定义事件解决了类似的问题。这些可以按任何顺序排列,并且没有结构依赖。例如你可以这样做:

$('.pageOpener').on('click', function(){
  // check the ID:
  if ($(this).prop('id') === 'continuebutton'){
     $('#continuebutton').trigger('myCustom');
  }
  else {
     $(this).trigger('myPageOpenerClick');
  }
});
$('.pageOpener').on('myPageOpenerClick', function(){
  // do that page opener stuff here
});

$('#continuebutton').on('myCustom', function(){
  // do that page custom stuff here
  alert('Howdy, handling id stuff');
  //trigger the other event now that stuff above is done:
  $(this).trigger('myPageOpenerClick');
});
于 2013-02-20T14:58:17.420 回答
0

您可以使用 .off('click') 取消绑定点击侦听器。

官方文档

更新:

你也可以做这样的事情。

$(".your_class").on("click", function(event){
  if($(this).attr("id")=="continuebutton"){
    return false;
  }else{
    //Continue handling the click event
  }

});
于 2013-02-20T14:39:58.777 回答