form.submit () вызовет двойной внутри формы - PullRequest
0 голосов
/ 27 июня 2019

Добрый день,

Вот мой код 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 на ChangePasswordAction.

Однако в настоящее время у меня есть проблема, которая иногда срабатывает 2 раза, это не всегда происходит, но частота возникновения составляет около 50%.

Ниже приведен журнал триггеров, который я получаю из журнала приложений:

2019-06-26 18:19:13.658 [WebContainer : 31] TRACE o.s.w.c.s.XmlWebApplicationContext - [bmaker] - Publishing event in Root WebApplicationContext: org.springframework.security.event.authorization.AuthorizedEvent[source=FilterInvocation: URL: /common/change_password.html?update=&__stoken=1a47d3a9-29e8-4904-b204-3cb9fc0129f0]
2019-06-26 18:19:13.660 [WebContainer : 26] TRACE o.s.w.c.s.XmlWebApplicationContext - [bmaker] - Publishing event in Root WebApplicationContext: org.springframework.security.event.authorization.AuthorizedEvent[source=FilterInvocation: URL: /common/change_password.html?update=&__stoken=1a47d3a9-29e8-4904-b204-3cb9fc0129f0]

Кто-нибудь знает, что не так с кодом?

1 Ответ

1 голос
/ 09 июля 2019

Если <input/> имеет type="submit" в форме, вы должны использовать preventDefault(), если вы хотите проверить подтверждение перед отправкой формы.Вы можете передать e в качестве параметра в слушателе как параметр реализации Event, например MouseEvent (из-за события click ) в этом случае.

Например:

$(':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;
    }
});

Вы можете получить доступ к форме элемента, выполнив .form для элемента, см. HTMLSelectElement.form

См.

Event.preventDefault ()

Событие

MouseEvent

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...