两个在表单上提交事件处理程序。一个人必须停止另一个

我必须将事件处理程序附加到表单上。如果不满足条件,第一个触发的应该停止另一个事件。 下面的代码不起作用,因为两个事件都将被触发。你能帮助我吗? 谢谢!
//fires first
$("#myform").submit(function(){
  if (some validation) {
    alert("You need to make the form valid");
    return false;
  }
});
//fires second
$("#myform").submit(function(){
  //ajax stuff
  return false;
});
附:我必须这样,因为ajax的东西是在一个不可更改的插件中。我无法避免两个事件处理程序     
已邀请:
看看
event.stopImmediatePropagation()
:   保持其余的处理程序不被执行,并防止事件冒泡DOM树。
$("#myform").submit(function(event){
  if (some validation) {
    event.stopImmediatePropagation();
    alert("You need to make the form valid");
    return false;
  }
});
您可能还想使用
event.preventDefault()
。 更新:只是为了澄清:您可以依赖调用事件处理程序的顺序。从jQuery的
bind
方法:   当事件到达元素时,将触发绑定到该元素的该事件类型的所有处理程序。如果注册了多个处理程序,它们将始终按照绑定的顺序执行。在执行所有处理程序之后,事件沿着正常事件传播路径继续。 订单可能没有在W3C的原始定义中定义,但它适用于jQuery。否则,无论如何都不需要上面提到的函数;)     
简而言之,没有。如果您有两个事件处理程序,那么您有两个事件处理程序。尽管如此,还是有办法解决它。 首先,请记住javascript执行是单线程的。如果你定义一个全局变量,比如说
var haveCalledSubmit=0;
,那么你可以用它来同步你的处理程序。例如,如果您使用以下命令启动每个处理函数:
if(haveCalledSubmit == 1)return haveCalledSubmit = 0;
else haveCalledSubmit = 1;
然后只会调用两个处理程序中的一个。您可以轻松地修改它以匹配某些条件,或处理两个以上的功能。 另一种方法是研究事件传播模型。这个页面将为您提供所需的所有信息,尽管Felix已经提到了一个可能做你想做的ajax命令。     

要回复问题请先登录注册