Подавить событие отправки / кнопку «Включить» можно только в том случае, если отключен JavaScript - PullRequest
5 голосов
/ 24 января 2010

У меня есть некоторая проверка JavaScript на стороне клиента в форме. Работает отлично. Но я хочу разместить пользователей, у которых отключен JavaScript. Моя проверка не запускается из атрибута onsubmit формы, это обработчик событий, связанный с обычной кнопкой в ​​форме. Таким образом, кнопка, которая запускает проверку и отправку, на самом деле не является отправкой, а просто type = "button":

<input type="button" value="Ok" class="okbtn">

Затем я регистрирую обработчик события в его событии click, которое выполняет мою проверку. Он передает, если все прошло:

function clickHandler(event){
    thisForm = event.data.caller
    var valid = submitValidation(thisForm);
    if (valid == true){
        thisForm.submit();
    } else{
      }
}

Моя проблема в том, что если у пользователя отключен JS, невозможно отправить форму. Я мог бы сделать кнопку type="submit", которая будет работать для пользователей с отключенной JS, но тогда она будет * всегда отправлять форму и обходить проверку для пользователей с JS. (Проверка будет запущена, но все равно будет отправлена). Если я нажму кнопку type="submit", могу ли я заблокировать событие отправки, если на него нажали? Я использую JQuery, может ли JQuery подавить отправку? Я хочу, чтобы моя проверка работала над тем, будет ли она отправлена.

Ответы [ 3 ]

12 голосов
/ 24 января 2010

Вы можете подавить клики, выполнив что-то вроде:

$('input[type=submit]').bind('click', function(e) {
    e.preventDefault() // prevents the form from being submitted
    clickHandler(); // the custom submit action
});

Или вы можете подавить фактическую отправку формы следующим образом:

$('form').bind('submit', function(e) {
    e.preventDefault();
    // etc
});
3 голосов
/ 24 января 2010

Измените кнопку на обычную кнопку отправки и свяжите проверку проверки с submit() в форме.

$("form").submit(function() {
  if (!submitValidation()) {
    return false;
  }
});

Из документов:

Событие submit отправляется на элемент, когда пользователь пытается отправить форму. Это можно только прикрепить к элементам. Формы могут быть представлен либо нажатием явный <input type="submit">, <input type="image">, или <button type="submit">, или нажатием Enter когда определенный элемент формы имеет фокус.

3 голосов
/ 24 января 2010

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

Таким образом, вы бы вернули true, если проверка прошла успешно, или false, если она не удалась, вместо вызова thisForm.submit().

...