Семантический интерфейс: как предотвратить отправку формы при сбое проверки?

У меня есть базовая форма входа в систему, и я указал валидацию формы и вызов API в моем файле javascript. Проблема, с которой я сталкиваюсь, заключается в том, что, когда я нажимаю кнопку входа в систему и в форме появляются ошибки, недопустимые поля будут выделены, но вызов API все равно будет выполнен, даже если форма недействительна.

Вот упрощенный пример:

<form class="ui form">
  <div class="field">
    <input name="username" type="text" placeholder="Username" autofocus>
  </div>
  <div class="field">
    <input name="password" type="password" placeholder="Password">
  </div>
  <button type="submit" class="ui submit button">Login</button>
  <div class="ui error message"></div>
</form>

$(function() {

    $('form').form({
        username: {
            identifier: 'username',
            rules: [{
                type: 'empty',
                prompt: 'Please enter your username'
            }]
        },
        password: {
            identifier: 'password',
            rules: [{
                type: 'empty',
                prompt: 'Please enter your password'
            }]
        }
    }, {
        onFailure: function() {
            // prevent form submission (doesn't work)
            return false;
        }
    });

    // *** this API call should not be made when the form is invalid ***
    $('form .submit.button').api({
        action: 'login',
        method: 'post',
        serializeForm: true,
        dataType: 'text',
        onSuccess: function() {
            // todo
        },
        onError: function() {
            // todo
        }
    });

});

У меня также есть панкр, который демонстрирует мою проблему.

Я что-то пропустил? Являются ли .api() а также .form() звонки правильные?

2 ответа

Решение

Хорошо, я понял это. Все, что мне нужно сделать, это изменить

$('form .submit.button').api(...

в

$('form').api(...

Я не понимал, что могу позвонить .api() прямо на <form> элемент. Теперь вызов API не выполняется, когда форма недействительна, потому что форма не отправлена ​​(ранее у меня был вызов API на кнопку отправки, которая не отменяется, когда форма недействительна).

Используйте событие onSuccess вместо метода API.

$('form').form({
        username: {
            identifier: 'username',
            rules: [{
                type: 'empty',
                prompt: 'Please enter your username'
            }]
        },
        password: {
            identifier: 'password',
            rules: [{
                type: 'empty',
                prompt: 'Please enter your password'
            }]
        }
    }, {
        onFailure: function() {
            // prevent form submission (doesn't work)
            return false;
        },
         onSuccess:function(event,fields){
            // prevent form submission
            // api / ajax call
          return false;
        }
    });
Другие вопросы по тегам