2015-09-08 5 views
0

У меня есть следующий семантическую структуру для формыФорма проверки на KeyDown

<form class="form-horizontal" name="signUp" id="signUp" novalidate> 
    <fieldset> 
     <legend>Sign Up</legend> 
     <div class="form-group inputEmail"> 
      <label for="inputUsername" class="col-lg-2 control-label" >Username</label> 
      <div class="col-lg-10"> 
       <input type='email' class="form-control" id="inputEmail" placeholder="Your Email" maxlength="56" /> 
      </div> 
     </div> 
     <div class="form-group inputPassword"> 
      <label for="inputPassword" class="col-lg-2 control-label" >Password</label> 
      <div class="col-lg-10"> 
       <input type='password' class="form-control" id="inputPassword" placeholder="Your Password" minlength="6" /> 
      </div> 
     </div> 
    </fieldset> 
</form> 

Моя цель состоит в том, чтобы выполнить проверку на конкретных входных элементов в форме на KeyDown. У меня есть следующий фрагмент кода jQuery, который делает это

$('#signUp').keydown(function(){ 
    signUp.usernameValid(); //performs validation 
    signUp.passwordValidity(); //performs validation 
}); 

Я стараюсь следовать технике делегирования событий. Но проблема, с которой я столкнулся и в настоящее время пытается понять, заключается в том, как сосредоточиться на определенных элементах, когда событие keydown запускается в элементе формы?

На основании приведенного выше кода, после того, как KeyDown событие вызывается все валидация будет срабатывать для входных элементов вместо конкретного одного

+0

Почему бы вы делая это на уровне формы? Имеет смысл проверять каждый вход отдельно, возможно на «размытие», или, возможно, на отправку формы. Похоже, вы пытаетесь обеспечить проверку в режиме реального времени, поэтому просмотр каждого отдельного ввода имеет больше смысла (для меня). –

+0

Привет, Марк, да, я пытаюсь добиться проверки в реальном времени, дело в том, что если у меня есть более двух входных элементов. Единственная опция, которую я имею, - это наблюдать каждый элемент ввода отдельно? – RRP

+0

Проблема с выполнением этого на уровне формы заключается в том, что вы не знаете, где пользователь находится в процессе заполнения формы. Они только вводили что-то в первый вход, но не в следующие 3? Если они все еще заполняют входные данные, и вы постоянно оцениваете всю форму, вы не даете пользователю возможность закончить то, что они делают. Надеюсь, это имеет смысл, но у вас может быть бизнес-кейс, о котором я не знаю. –

ответ

0

$('#signUp input').on('keydown', function(){ 
 
    //this will give you the specific element 
 
    console.log($(this)); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<form class="form-horizontal" name="signUp" id="signUp" novalidate> 
 
         <fieldset> 
 
          <legend>Sign Up</legend> 
 
          <div class="form-group inputEmail"> 
 
           <label for="inputUsername" class="col-lg-2 control-label" >Username</label> 
 
           <div class="col-lg-10"> 
 
            <input type='email' class="form-control" id="inputEmail" placeholder="Your Email" maxlength="56" /> 
 
           </div> 
 
          </div> 
 
          <div class="form-group inputPassword"> 
 
           <label for="inputPassword" class="col-lg-2 control-label" >Password</label> 
 
           <div class="col-lg-10"> 
 
            <input type='password' class="form-control" id="inputPassword" placeholder="Your Password" minlength="6" /> 
 
           </div> 
 
          </div> 
 
         </fieldset> 
 
        </form>

1
$('#inputEmail').keydown(function (e) { 
    if (e.ctrlKey || e.altKey) { 
    //e.preventDefault(); 
    $("#errg").html("Allow only alphabets").show().fadeOut("slow"); 
       return false; 
    } else { 
    var key = e.keyCode; 
    if (!((key == 8) ||(key == 9) || (key == 32) || (key == 46) || (key >= 35 && key <= 40) || (key >= 65 && key <= 90))) { 
    $("#errg").html("Allow only alphabets").show().fadeOut("slow"); 
       return false; 
    } 
    } 
    }); 
Смежные вопросы