form.submit()将在表单内触发两次

时间:2019-06-27 07:13:55

标签: java jquery forms jsp post

美好的一天,

以下是我的jsp代码:

<s:form beanclass="c.c.i.c.app.profile.ui.ChangePasswordAction" method="post" name="form1">
<!-- some others code here -->
     <sx:row cssClass="button_row">
          <sx:input name="updatePassword" image="submit"/>  
     </sx:row>
</s:form>

这是我的jquery

<script type="text/javascript">
$(':input[name=updatePassword]').click(function() {

        var answerProceed = confirm("Do you wish to proceed with the changes?");

        if( answerProceed ){
            var form = $("form[name=form1]");
            form.attr("action", '<s:url beanclass="c.c.i.c.app.profile.ui.ChangePasswordAction" event="update"/>');
            form.submit();
        } else {
        return false;}
    });
</script>

我们可以看到,在jQuery中,它将触发update的{​​{1}}事件。

但是,目前我有一个问题,有时它会触发2次,但并非总是发生,但是发生率约为50%。

以下是我从应用程序日志中获得的触发日志:

ChangePasswordAction

有人知道代码有什么问题吗?

1 个答案:

答案 0 :(得分:1)

如果表单中的<input/>type="submit"的表单,则在提交表单之前要检查确认是否需要使用preventDefault()。 在这种情况下,您可以将e作为Event的实现参数,例如MouseEvent作为$(':input[name=updatePassword]').click(function(e) { // <-- e implements Event e.preventDefault(); // <-- prevent the submit of the form var answerProceed = confirm("Do you wish to proceed with the changes?"); if (answerProceed) { var form = $("form[name=form1]"); // var form = e.currentTarget.form; you can do this // var form = this.form; or you can do this, "this" is implicit clicked element form.attr("action", '<s:url beanclass="c.c.i.c.app.profile.ui.ChangePasswordAction" event="update"/>'); form.submit(); } else { return false; } }); 的实现参数(由于 click 事件)进行传递。

例如:

.form

您可以通过对元素执行version: "2.4" services: nginx: image: nginx:1.12.1 ports: - "443:443" - "80:80" (...) my-service: (...) networks: default: external: name: my-network 来访问元素的形式,请参见 HTMLSelectElement.form

查看

Event.preventDefault()

Event

MouseEvent