Ввод формы начальной загрузки: запретить отправку, но разрешить проверку ввода

#javascript #jquery #html #forms #twitter-bootstrap

#javascript #jquery #HTML #формы #twitter-bootstrap

Вопрос:

У меня следующая проблема: я использую форму начальной загрузки для приема ввода от пользователей, и я использую jQuery preventDefault(), чтобы отключить кнопку отправки от отправки формы (вместо этого я использую AJAX). Однако эта функция также предотвращает проверку ввода, выполняемую bootstrap. Например, если кто-то вводит электронное письмо без «@» в

 <input type="email" class="form-control">
 

после нажатия кнопки отправки bootstrap проверит этот ввод и вернет всплывающее окно с ошибкой.

Мой вопрос: как предотвратить отправку запроса, сохранив механизм проверки формы начальной загрузки без изменений?

Что я пробовал: использование preventDefault() и написание собственного сценария проверки, однако это похоже на изобретение колеса и использование дополнительного кода, когда он не нужен.

Спасибо!

Комментарии:

1. Вы правы, было бы немного заново изобретать колесо. Я бы рекомендовал взглянуть на bootstrapvalidator.com чтобы помочь выполнить проверку. Кажется, он справляется с этим довольно хорошо…

2. Спасибо! Однако Bootstrap сам по себе уже имеет механизм для некоторой «базовой» проверки входных данных. Поэтому, если я добавлю плагин jQuery, я не буду изобретать велосипед заново, но я бы добавил дополнительный код, в котором, возможно, не было необходимости. Что я надеюсь выяснить, так это то, возможно ли предотвратить действие отправки только частично: разрешить проверку ввода, но запретить отправку запроса POST для отправки формы.

3. Достаточно справедливо. Однако, если бы вы использовали это, вам больше не нужно было бы переопределять кнопку отправки. Теперь я просто ухожу от темы.

4. После некоторого просмотра кажется, что единственный способ действительно получить то, что вам нужно, — это иметь метод .submit в вашей форме, затем выполнить проверку, а затем отправить (я могу предоставить пример кода, если хотите). С точки зрения bootstrap, делающего это за вас, это обрабатывается с помощью чего-то вроде bootstrapvalidator.com , или jqueryvalidation.org … Если есть что-то другое, я еще не слышал об этом…

5. Хорошо, спасибо 🙂

Ответ №1:

Я полагаю, что вы говорите о проверке собственной формы HTML5, а не о проверке самим bootstrap, я никогда раньше не сталкивался с проверкой начальной загрузки. (хотя, возможно, я ошибаюсь).

Большинство новых браузеров будут проверять <input type='email'/> наличие адреса электронной почты и <input type='text' required='required'/> в соответствии с требованиями при отправке формы.

Если, например, вы используете e.preventDefault(); событие on the click на кнопке отправки, форма никогда не будет пытаться отправить, и, следовательно, собственная проверка никогда не произойдет.

Если вы хотите сохранить проверку, вам нужно использовать e.preventDefault(); событие отправки формы, а не событие нажатия на кнопку.

HTML…

 <form action='' method='post'>
   <input type='email' name='email' required='required' placeholder='email'/>
   <button type='submit'>Submit</button>
</form>
 

jQuery…

 //this will stop the click on the button and will not trigger validation as the submit event will never be triggered
$("button").on('click',function(e){
    e.preventDefault();
    //ajax code here
});

//this will stop the submit of the form but allow the native HTML5 validation (which is what i believe you are after)
$("form").on('submit',function(e){
    e.preventDefault();
    //ajax code here
});
 

В любом случае, надеюсь, это поможет. Если я что-то неправильно понял, дайте мне знать, и я постараюсь помочь в дальнейшем.

Ответ №2:

У меня была такая же проблема, я решил использовать «stopPropagation» как способ остановить отправку формы. Но после небольшого чтения jQuery 3 я понял, что «preventDefault» было достаточно для того, что я хотел.

Это привело к тому, что произошла проверка формы, и событие отправки не продолжилось.

(Этот пример относится к попытке, которую я предпринял самостоятельно).

 $('form').on("submit",function( event ) {

if ( $('#id_inputBox_username').val().length == 0 amp;amp; 
$('#id_inputBox_password').val().length == 0 ) {
    event.preventDefault();
    $('#id_inputBox_username').tooltip('show');
    $('#id_inputBox_password').tooltip('show');         

} else if ( $('#id_inputBox_username').val().length == 0 ) {
    event.stopPropagation();
    $('#id_inputBox_username').tooltip('show');

} else if ( $('#id_inputBox_password').val().length == 0 ) {
    event.stopPropagation();
    $('#id_inputBox_password').tooltip('show'); 
}
});
 

Ответ №3:

У меня была такая же проблема, и я нахожу это решение:

 $('#formulario').on('submit', function (e) {
  if (e.isDefaultPrevented()) {
    // handle the invalid form...
  } else {
    // everything looks good!
    e.preventDefault(); //prevent submit
            $(".imprimir").show();
            $(".informacao").fadeOut();
            carregardados();
  }
})
 

Комментарии:

1. Вы должны предоставить информацию о том, где вы нашли это решение.

2. Ваш ответ касается проверки начальной загрузки. Это не имеет никакого отношения к этому вопросу.