Семантический интерфейс: как предотвратить отправку формы при сбое проверки?
У меня есть базовая форма входа в систему, и я указал валидацию формы и вызов 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;
}
});