2013-08-08 12 views
17

Mam dwa wejścia, np.Ustaw wejście jako nieprawidłowe

pass:  <input type="password" name="pass" required/> 
pass again: <input type="password" name="pass2" required/> 

i chcę porównać te wejścia, a jeśli pasują, ustawić wejście jako prawidłowe. Próbowałem to, ale myślę, że prop('valid', true); nie działa:

$(document).ready(function() { 
    $('input[name=pass2]').keyup(function() { 
     if($('input[name=pass]').val() == $('input[name=pass2]').val()) { 
      $('#pass_hint').empty(); 
      $('#pass_hint').html('match'); 
      $(this).prop('valid', true); 
     } else { 
      $('#pass_hint').empty(); 
      $('#pass_hint').html('mismatch'); 
      $(this).prop('invalid', true); 
     } 
    }); 
}); 

utworzyć formularz rejestracyjny, a jeśli hasła nie są takie same, pole wejściowe jest nieważny i nie mogę złożyć tego i pokaż mi jakąś wskazówkę. ... i nie wiem, jak ustawić to wejście jako nieprawidłowe

+0

Czy można oczekiwać jakiegoś innego zachowania podczas oznaczyć ją jako nieważne, czy po prostu oczekujesz, że styl wskaże użytkownikowi, że jest on nieprawidłowy? – Travesty3

+0

Czy w polu logowania znajduje się wyświetlany element o nazwie '# pass_hint'? PS. nie musisz go opróżniać, '.html()' robi to za Ciebie. – DevlshOne

+1

Właściwie, dlaczego sprawdzasz poprawność danych wprowadzanych przez użytkownika w JQuery? Można go manipulować, a użytkownik będzie mógł łatwo ominąć te reguły. Proponuję zrobić to po stronie serwera. –

Odpowiedz

24

W HTMLInputElement interface nie ma takiej właściwości, jak valid lub invalid.

Można użyć metody setCustomValidity(error) z natywnym sprawdzaniem poprawności formularza.

Co do skryptu, oto demo, który powinien działać we wszystkich przeglądarkach zgodnych z HTML5:

$('input[name=pass2]').keyup(function() { 
 
    'use strict'; 
 

 
    if ($('input[name=pass]').val() === $(this).val()) { 
 
     $('#pass_hint').html('match'); 
 
     this.setCustomValidity(''); 
 
    } else { 
 
     $('#pass_hint').html('mismatch'); 
 
     this.setCustomValidity('Passwords must match'); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form action='#'> 
 
    <p>Password: 
 
     <input name=pass type=password required> 
 
    </p> 
 
    <p>Verify: 
 
     <input name=pass2 type=password required> 
 
    </p> 
 
    <p id=pass_hint></p> 
 
    <button type=submit>Submit</button> 
 
</form>

+1

Zakładam, że Chrome jest przeglądarką zgodną z HTML 5, ale twoje skrzypce nie działa –

+0

@SerjSagan Właśnie przetestowałem to w Chrome 46.0.2490.80 na Linuksie i to działa. Czy możesz rozwinąć to, co nie działa? –

+0

Moja zła. Nie spojrzałem na kod wystarczająco długo, aby zobaczyć, że trzeba było wpisać co najmniej coś w tym drugim polu, aby walidacja się rozpoczęła, nm –

Powiązane problemy