Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.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 提交按钮(保证)总是首先调用JS处理程序吗?_Javascript_Jquery_Html - Fatal编程技术网

Javascript 提交按钮(保证)总是首先调用JS处理程序吗?

Javascript 提交按钮(保证)总是首先调用JS处理程序吗?,javascript,jquery,html,Javascript,Jquery,Html,快速提问,如果我有一个提交表单的提交字段 <input type="submit" id="btnSubmit" value="Submit" /> 我是否保证JS处理程序将首先发生,然后再提交任何服务器端表单 我认为保证这一点的唯一方法是在JS处理程序中preventDefault。但是如果我们不这样做,我们无法确定是JS点击处理程序还是服务器端操作将首先发生 e.preventDefault(); 我能保证吗?因此,无需e.preventDefault? 不要建议使用任何“常

快速提问,如果我有一个提交表单的提交字段

<input type="submit" id="btnSubmit" value="Submit" />
我是否保证JS处理程序将首先发生,然后再提交任何服务器端表单

我认为保证这一点的唯一方法是在JS处理程序中
preventDefault
。但是如果我们不这样做,我们无法确定是JS点击处理程序还是服务器端操作将首先发生

e.preventDefault();
我能保证吗?因此,无需e.preventDefault?


不要建议使用任何“常规按钮”,我必须使用Submit字段,这是一个Struts2应用程序,其中的Submit字段必须保留在表单上。

没关系,只需创建按钮类型的按钮,使用juery click handler处理,做你必须做的事情,然后提交表单即可

  $("btnSubmit").click(function () {

        //do what you have to do before submit
        $('form[name=createcustomer]').submit();

    });

JavaScript单击事件处理程序可能会在提交表单之前触发。尽管如此,这并不能保证。这是一个比赛条件。您应该做的是决定操作的顺序,并适当地编写代码:

如果希望在提交表单之前触发客户端JS代码,请使用event.preventDefault();(注意:您必须将事件参数传递给单击处理程序。您在发布的代码中没有这样做)

接下来运行客户端代码。最后,使用JS提交表单:

 // pass the event param to the handler function 
 $('#btnSubmit').click(function(e) {

    //prevent immediate form submission
   e.preventDefault();

   // do whatever you want to happen BEFORE the form is submitted   
   alert('clicked');

   // to do Ajax form submission: 

   var form = $('#btnSubmit').closest.('form');
   var data = form.serialize();
   var URL = form.attr('action');

   $.ajax({
      url: URL
      data: data;
      method: 'POST'
   });

   // OR... to do non-Ajax form submission:
    var form = $('#btnSubmit').closest.('form');
    form.submit();
});
相反,如果希望在表单提交后执行客户端代码,请使用Ajax并执行回调:

 $('#btnSubmit').click(function() {

   var form = $('#btnSubmit').closest.('form');
   var data = form.serialize();
   var URL = form.attr('action');

   $.ajax({
      url: URL
      data: data;
      method: 'POST'
   }).then(function () {
        alert('clicked')
   });


});

我认为您混淆了两个事件
单击
提交
。第一种情况发生在您单击按钮时,即使用鼠标。但是
也接受键盘事件。允许提交表单而无需单击
。这样,您应该处理
submit
事件以确保表单已提交

submit
事件是由于单击
而生成的,但如果不阻止,则可能不会由于上述原因发生

您可以在
submit
事件本身上使用
preventDefault()
停止提交表单。如果将其放置在
单击
上,但如果未发生
单击
事件,则仍会提交表单

单击按钮时javascript事件的顺序-
单击
->
提交
。您可以通过
preventDefault()
returnfalse
停止任何事件,但在关闭javascript时,它不会阻止表单提交


因此,您的问题的答案是javascript事件首先发生,然后执行操作。

否,它必须是每个应用程序要求的提交字段,因此我的问题我的问题很糟糕,没有看到这一部分。缺点是,这无法回答问题。我没有Ajax方法,我有一个提交字段自动转到服务器端方法(例如Struts方法)。是先提交还是先JS OnClick?这就是问题所在。好的,谢谢。你确定这是“比赛条件”吗?这是我的想法,但我的同事不同意,他说JS OnClick总是先发生。我发现:-根据这篇文章,JS处理程序总是首先出现。你的朋友可能是对的,但不管怎样,为什么不直接按照你想要的顺序编码它呢?我必须使用提交字段,这是一个Struts2应用程序,表单上必须保留提交字段。-没有意义,为什么没有意义?在Struts表单上,您有一个带有提交按钮的表单,该按钮将表单提交给服务器。这是一个“直接”表单提交,而Ajax调用只执行部分表单或JSON。传统的Struts应用程序使用提交来转到动作或控制器。碰巧我需要在提交中添加一个额外的JS OnClick,我想知道哪一个肯定会首先发生。它是一个简单的HTML。你想用js做什么?
 $('#btnSubmit').click(function() {

   var form = $('#btnSubmit').closest.('form');
   var data = form.serialize();
   var URL = form.attr('action');

   $.ajax({
      url: URL
      data: data;
      method: 'POST'
   }).then(function () {
        alert('clicked')
   });


});