2013-06-10 12 views
6

Sto tentando di creare uno di quei moduli di nuova password standard, in cui digiti la nuova password una volta e poi una seconda volta per confermare. Vorrei in modo che una volta che si sfocatura lontano da questi campi, se non corrispondono, sia saranno contrassegnati non validi, come nel seguente scenario:HTML5/JS/jQuery: in caso di input non valido, contrassegna un elemento diverso (arbitrario) come non valido

  1. L'utente inserisce la password abc in #newpassword1.
  2. Schede utente su #newpassword2.
  3. L'utente immette la password def in #newpassword2.
  4. Schede utente assenti.
  5. La convalida rileva una mancata corrispondenza e contrassegna entrambi i valori #newpassword1e#newpassword2 come non validi.

So che posso segnare il bersaglio di un evento come non validi utilizzando e.target.setCustomValidity(...), ma non capisco modello di eventi di JavaScript molto bene e non riesco a capire come contrassegnare un diverso elementocome non valido in base alla propria invalidità del target dell'evento.

Questo è il relativo estratto di codice (non funzionante) che sto cercando di utilizzare:

if ($('#newpassword1').val() != $('#newpassword2').val()) { 
    errorMessage = "The new passwords you've entered don't match."; 

    $('#newpassword1, #newpassword2').setCustomValidity(errorMessage); 
} 

Questo sembra che dovrebbe funzionare, in modo intuitivo, ma ovviamente non è così. L'errore è semplicemente TypeError: $(...).setCustomValidity is not a function.

Si prega di notare: Non sto chiedendo come aggiungere un anello rosso o qualsiasi altra cosa a un campo, voglio che in realtà essere validi (come in, avere il suo ritorno validity.valid proprietà false).

È possibile farlo?

Grazie!

+4

credo che 'setCustomValidity' deve essere utilizzato contro un oggetto HTML nativo, e non un oggetto jQuery, provare' .get() setCustomValidity. (ErrorMessage) ' – Ohgodwhy

+1

Credo' $ ('# newpassword1, # ​​newpassword2 ') [0] .setCustomValidity (errorMessage); 'funzionerà anche – tymeJV

+0

Grazie a tutti e due! – kine

risposta

10

Prova il codice qui sotto. Stai ricevendo quell'errore perché jQuery restituisce una matrice di oggetti selezionati e poiché setCustomValidity è supportato da elementi di input nativi e non da oggetti jquery, stai vedendo quell'errore.

$('#newpassword1, #newpassword2').each(function() { 
    this.setCustomValidity(errorMessage) 
}); 
+0

Non so perché non l'ho provato, mi sono imbattuto in questo stesso identico problema una volta prima. Grazie! – kine

+0

Ho inserito questo codice nella mia funzione '$ (document) .ready' e ora il messaggio viene visualizzato anche se l'input è pieno! @Sandeep – rezCash

1
<div class="cabinet_settings_header cabinet_header">Список регионов работы для выбора</div>    
      <div class="registration_region_select checkbox-group required"> 
       <?for($i = 0; $i < sizeof($regions); $i++):?>      
        <label for="region_id_<?=$regions[$i]['region_id']?>"> 
         <input type="checkbox" name="region_id[]" value="<?=$regions[$i]['region_id']?>" id="region_id_<?=$regions[$i]['region_id']?>" /> 
         <?=$regions[$i]['name']?> 
        </label> 
       <?endfor;?> 
      </div> 

<div class="cabinet_settings_header cabinet_header">Проверка выбора регионов работы (разрешмет отправку формы, если минимум 1 выбран)</div>    

     $('.checkbox-group.required input').on('change', function(){ 
      checkRegions(); 
     }); 


     function checkRegions(){ 

      checked_counter = $('.checkbox-group.required :checkbox:checked').length;    

      if(checked_counter > 0){ 
       $('.checkbox-group.required #region_id_2')[0].setCustomValidity(''); 

      }else{ 
       $('.checkbox-group.required #region_id_2')[0].setCustomValidity('Выберите хотябы 1 из вариантов'); 
      } 
     } 

$(document).ready(function() { 

      checkRegions(); 


      $("form").submit(function(event){ 
        if($('.checkbox-group.required :checkbox:checked').length <= 0){       
         $('.checkbox-group.required #region_id_2').focus(); 
         event.preventDefault(); 

        } 


      }) 


     }); 
+0

Un gigantesco blocco di codice formattato in modo non corretto senza alcuna spiegazione non è mai una buona risposta. – Madbreaks

Problemi correlati