Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让一个事件防止在javascript中表单提交时触发另一个事件?_Javascript_Html - Fatal编程技术网

如何让一个事件防止在javascript中表单提交时触发另一个事件?

如何让一个事件防止在javascript中表单提交时触发另一个事件?,javascript,html,Javascript,Html,我有这样一个html页面: <html> <head> <script src="jquery.js"></script> <script src="validation.js"></script> <script> function show_warning() { // If some conditio

我有这样一个html页面:

<html>
  <head>
    <script src="jquery.js"></script>
    <script src="validation.js"></script>
    <script>
      function show_warning()
      {
        // If some condition is true, show a warning when the form is being submitted
        if (condition)
        {
          alert("Warning");
        }
      }

      $(document).ready(function() {
        $("form").submit(show_warning);
      });
    </script>
  </head>
  <body>
    <form method=POST>
        ...
    </form>
  </body>
</html>
$(document).ready(function() {
    $("form").submit(function( event ) {
      if (some_field_is_invalid)
      {
        alert("Error");
        event.preventDefault();
        return false;
      }
    });
});
我希望我的show_警告仅在表单通过验证并实际提交时触发。现在,即使验证失败,它仍然显示警告

我做错了什么?

如果我没有弄错(我使用jquery事件处理已有一段时间了),希望社区能纠正我

TL;博士 删除此项:

函数显示警告()
{
//如果某些条件为真,则在提交表单时显示警告
如果(条件)
{
警报(“警告”);
}
}
$(文档).ready(函数(){
$(“表格”)。提交(显示警告);

});我不希望将验证和警告合并到一个文件中,因为我的验证代码与警告代码无关。他们正在测试两种不同的、不相关的东西。大多数使用validation.js的页面不需要警告代码。另一方面,你的第二个例子——让验证代码返回一个我可以检查的布尔值,可能正是我所需要的。我试试看。ThanksI意识到我正在为同一事件添加两个事件处理程序,据我所知这不是问题。是否没有办法让第一个事件处理程序停止处理同一事件的其他处理程序?问题不是您有两个侦听器,而是您的第二个侦听器不依赖于第一个侦听器,但是您希望它是依赖的,因为验证发生在第一个侦听器上所以使一个依赖于另一个的唯一方法是让一个调用另一个?没有办法让一个监听器阻止浏览器为该事件执行任何其他监听器?好吧,如果你做了一些卑鄙的攻击,也许这是可能的,但是把这个案例看作一个管道,如果你有两个进程应该相互依赖,那么你必须对它们进行优先级排序,并一个接一个地运行,但是在这里你只是并行运行你的函数,当然你可以在这两种方法中执行表单验证,但是它听起来并不干净。只需创建两个函数,第二个函数必须调用第一个函数,并使用其结果。就像我上一段代码一样