Использование preventDefault для кнопки отправки

Я пытаюсь решить проблему, предложенную учебником jQuery. Это читается так

«Данные отправляются, даже если не было сделано никаких записей, чтобы исправить это, вы должны остановить действие кнопки отправки по умолчанию. Для этого закодируйте метод preventDefault объекта события в операторе if в конце файла, как на рис. 10-6

примечание* вот как выглядит код в 10-6, который у меня не работает, когда я помечаю его в конце своего кода, как предлагает книга.

if (isValid == false) { event.preventDefault(); }

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

примечание* обработчик события отправки выглядит следующим образом

    $("#email_form").submit(
    function() {
        var isValid = true;

                      // the script proceeds to validate each text field accordingly                    bla bla bla

Теперь проверьте еще раз с пустыми полями. Это должно отображать «Это поле обязательно для заполнения» справа от каждого поля, кроме поля почтового индекса».

Моя проблема в том, что мой preventDefault не работает, и он все равно будет отправляться, независимо от того, что я пытаюсь.

Интересное примечание из текста, объясняющего рисунок 10-6, которое может помочь, но которое я не совсем понимаю, заключается в следующем.

«Здесь вы видите окончательный оператор if, который является истинным, если переменная isValid имеет значение false, что означает, что одно или несколько полей недействительны. В этом случае выполняется метод preventDefault объекта события. Этот объект передается функции для обработчик события отправки в качестве параметра, который хранится в переменной события первой строкой в ​​этом обработчике.Если вы не используете метод preventDefault, когда одно или несколько полей отправляются на сервер, форма будет отправлена ​​на сервер, поскольку это его действие по умолчанию».

Мы будем очень признательны за любое понимание.


person user2113538    schedule 27.02.2013    source источник
comment
Вы должны передать event в функцию, чтобы использовать event.preventDefault(). function(event) { event.preventDefault() ...   -  person Sparky    schedule 27.02.2013
comment
.submit(function(event){ (это то, о чем говорит автор, event нужно передать в функцию обработчика события)   -  person Brad Christie    schedule 27.02.2013


Ответы (2)


Переменная event должна быть передана вашему обработчику. Ваша анонимная функция function(){} должна принимать переменную event:

$("#email_form").submit(function(event){
    var isValid = true;

    // do all your validation here
    // potentially if one of the fields is empty 
    // isValid will be set to false

    if (!isValid) {
        event.preventDefault();
    }
});
person helloandre    schedule 27.02.2013
comment
Да, но мне все еще нужно включить оператор if... вы предлагаете что-то вроде этого? if (isValid == false) { $(#email_form).submit(function(event){ event.preventDefault(); }); Я просто не знаю, как написать эту строчку, но спасибо, Андре, за помощь... - person user2113538; 27.02.2013
comment
вам нужен оператор if внутри функции, после проверки всего. см. обновленный ответ. - person helloandre; 28.02.2013
comment
Этот все еще работает в 2016 году с последней версией jQuery. Отличное решение, в том числе и для загрузки файлов! - person KJS; 09.09.2016

Сегодня на уроке я узнал, что ответ на самом деле был примерно таким.

$("#email_form").submit(
function(event) {
    var isValid = true;

нужно, чтобы моя функция была в конце проверки (ниже)...

if (isValid == false) { event.preventDefault(); }

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

person user2113538    schedule 27.02.2013