Обратный вызов JavaScript/jQuery (отправить)

Может кто-нибудь сказать мне, почему этот скрипт не работает.

Я хочу, чтобы предупреждение «Я только что отправил форму» перед «Форма отправлена». Поэтому я использовал обратный вызов, но он все еще пропускает отправку.

function formSubmit(callback) {
    $("form").on("submit", function(e){
        e.preventDefault();
        alert("I just submitted the form.");
    });
    callback();
}

formSubmit( function() {
    alert("The form submitted.");
});

HTML

<body>
    <form>
        <input type="submit"/>
    </form>
</body>
<script src="https://code.jquery.com/jquery-2.1.3.min.js"></script>
<script src="js/forTesting.js"></script>

person Aryadne    schedule 12.10.2015    source источник


Ответы (2)


Вы должны запустить свою функцию callback в функции обработчика событий jQuery (второй аргумент для on. В противном случае callback будет выполняться сразу внутри formSubmit, а alert("I just submitted the form."); будет выполняться только после того, как произойдет событие отправки.

function formSubmit(callback) {
    $("form").on("submit", function(e){
        e.preventDefault();
        alert("I just submitted the form.");
        callback();
    });
}

formSubmit( function() {
    alert("The form submitted.");
});
person Drew Gaynor    schedule 12.10.2015
comment
Спасибо за подробное объяснение. Я понял это только сегодня утром и чувствую себя дураком. - person Aryadne; 14.10.2015
comment
@ user37172 Рад, что смог помочь. Не забудьте принять ответ, если он был вам полезен. - person Drew Gaynor; 14.10.2015

Вам нужно вызвать обратный вызов после предупреждения, а не после привязки обработчика submit.

function formSubmit(callback) {
    $("form").on("submit", function(e){
        e.preventDefault();
        alert("I just submitted the form.");
        callback();
    });   
}
person Barmar    schedule 12.10.2015
comment
Спасибо большое. Я только что понял это. ;) - person Aryadne; 14.10.2015