2013-07-25 3 views
11

Решение должно быть довольно простым. Я стараюсь, чтобы форма не отправлялась правильно, когда в ящиках ввода нет значения. Вот мой JSFiddle: http://jsfiddle.net/nArYa/7/Использование jQuery для предотвращения отправки формы при полях ввода

// Markup

<form action="" method="post" name="form" id="form"> 
<input type="text" placeholder="Your email*" name="email" id="email"> 
<input type="text" placeholder="Your name*" autocomplete=off name="name" id="user_name" 
<button type="submit" id="signup" value="Sign me up!">Sign Up</button> 
</form> 

// JQuery

if ($.trim($("#email, #user_name").val()) === "") { 
    $('#form').submit(function(e) { 
     e.preventDefault(); 
     alert('you did not fill out one of the fields'); 
    }) 
} 

Как вы можете видеть в JSFiddle, проблема в том, что, когда я печатаю что-то в обоих полях появится окно предупреждения STILL. Я с трудом понимаю, почему. Что-то не так в моем if ($. Trim ($ "# email, #user_name"). Val()) === "")?

+1

Да, вы должны проверить каждый из них в отдельности, если вы используете только один селектор, только одно значение будет возвращено –

+1

Из документации: Получить текущее значение ** первый ** элемент в наборе согласованных элементов – Barmar

+1

Вам нужно прикрепить функцию javascript к вашей кнопке отправки. <кнопка onclick = "somefunction();" .. /> Если функция возвращает false, если поля недействительны. – chadiusvt

ответ

23

Две вещи, # 1 проверка на наличие пустых полей должно происходить на каждой попытке представить, # 2, Вы должны проверить каждое поле индивидуально

$('#form').submit(function() { 
    if ($.trim($("#email").val()) === "" || $.trim($("#user_name").val()) === "") { 
     alert('you did not fill out one of the fields'); 
     return false; 
    } 
}); 

Updated fiddle

+0

Он работает непосредственно с использованием кода if ($ .trim ($ ("# email"). Val()) === "" || $ .trim ($ ("# user_name").val()) === "") { alert ('вы не заполнили одно из полей'); return false; } – gnganpath

5

Ваш чек происходит при загрузке страницы. При отправке формы необходимо проверить поле.

$('#form').submit(function(e) { 
    if ($.trim($("#email, #user_name").val()) === "") { 
     e.preventDefault(); 
     alert('you did not fill out one of the fields'); 
    } 
}); 
1

Положите ваш, если заявление внутри обратного вызова:

$('#form').submit(function(e) { 
    if ($.trim($("#email").val()) === "" || $.trim($("#user_name").val())) { 
     e.preventDefault(); 
     alert('you did not fill out one of the fields'); 
     //You can return false here as well 
    } 
}); 
+0

Это неправильный ответ, будет отправлен, даже если имя пользователя пуст –

2

Я думаю, что это поможет:

$('#form').submit(function(e) { 
    e.preventDefault(); 
    $("#email, #user_name").each(function(){ 
     if($.trim(this.value) == ""){ 
      alert('you did not fill out one of the fields'); 
     } else { 
      // Submit 
     } 
    }) 
}) 
2

HTML5: использовать необходимый во входном теге

  • Логический атрибут.

  • Поле ввода должно быть заполнено до , отправив.

  • Работает с текстом, поиском, адресом, телефоном, электронной почтой, паролем, сборщиками даты, числом, флажком, радио и файлом.

    <input required type='text'...> 
    

w3schools hint

+1

Как насчет ввода пробелов? Я просто использовал это, но он все равно отправляется при вводе пробелов в поля ввода. –

+1

Затем вы можете использовать атрибут Pattern вместе с обязательным. http://www.felgall.com/html5r.htm поможет вам. (не поддерживается браузером сафари) – Elnaz

Смежные вопросы