2016-01-06 2 views
0

мой простой код jquery показывает окно с изменениями, но также отправляет форму. почему это происходит? при нажатии клавиши ввода, и если длина меньше 3, тогда она должна показывать ошибку и не должна отправлять форму, но она отправляет форму даже после показа ошибки.форма отправки даже после возврата false jquery

  $('#frmSearch input').keydown(function(e) { 
      if (e.keyCode == 13) { 
       if ($('#frmSearch input').val().length < 3) { 
        alert("SEARCH TEXT TOO SHORT"); 
        return (false); 
       } 
       else 
       { 
        $('#frmSearch').submit(); 
       } 
      } 
     }); 
+1

Вам нужно больше информации. С какой строкой вы тестируете? С кодом, который вы разместили здесь, ничего не случилось, если ваши селекторы верны. – Antiga

+2

Почему() вокруг false? – epascarello

+0

Мысль, которая была слишком странной - но синтаксически она должна работать одинаково. Я думаю, что это, вероятно, браузер, принимающий форму submit. Нужна дополнительная информация. – Antiga

ответ

2

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

$("#frmSearch").submit(function(e){ 
    if ($('#frmSearch input').val().length < 3) { 
     e.preventDefault(); 
     alert("SEARCH TEXT TOO SHORT"); 
    } 
} 

и вы не обрабатываете событие отправки, но событие keydown, которое не прекращает подавать запрос.

0

Иногда клавиша Enter может автоматически отправлять форму по умолчанию. Если вы хотите перехватить и предотвратить это поведение, вы можете остановить отправку по умолчанию. Я бы положил e.preventDefault() в ваш код.

Обновлено

$('#frmSearch input').keydown(function(e) { 

    if (e.keyCode == 13) { 
     //Prevents default submit 
     e.preventDefault(); 

     if ($('#frmSearch input').val().length < 3) { 
      alert("SEARCH TEXT TOO SHORT"); 
      return (false); 
     } 
     else 
     { 
      $('#frmSearch').submit(); 
     } 
    } 
}); 
+0

Вам еще нужно проверить, какая клавиша была нажата, прежде чем использовать preventDefault. В противном случае вы не можете вводить что-либо в поле ввода, если вы делаете это для каждого ключа. –

+0

Антонио - ОК, если это так, то я обновил местоположение e.preventDefault до проверки на keyCode 13. Я не знаю, какие у других клавиш были бы функции по умолчанию. – madvora

+0

Просто попробуйте сами, и вы быстро поймете, что я имею в виду. –

1

вы можете попробовать так же, использовать не нажатие клавиши использовать KeyDown

(function ($) { 
  $ ('# frmSearch input'). keypress (function (e) { 
             if (e.KeyCode == 13) { 
                 if ($ ('# frmSearch input'). val(). length <3) { 
                     alert ("SEARCH TEXT TOO SHORT"); 
                     return (false); 
                 } 
                 else 
                 { 
                     $ ('# frmSearch') submit().; 
                 } 
             } 
         }); 

}) (jQuery); 
Смежные вопросы