2014-12-15 12 views
7

Ho questo questionario che uso per avviare un'applicazione. Sto usando javascript per convalidare prima di inviarlo, ma sto incontrando un problema in cui si convalida solo il secondo pulsante su ogni domanda e non convalida ogni domanda individualmente. Ho pubblicato il codice qui sotto.Pulsanti radio non validi correttamente

Questionario

<? 
    for($i = 1; $i <= count($questions); $i++){ 
     print "<div class='form-group'>"; 
      print "<div class='col-md-12'>"; 
       print "<p>$i) ".$questions[$i-1]."</p>"; 
       print "<label class='radio-inline'>"; 
        print "<input type='radio' name='q$i' value='1'>Yes"; 
       print "</label>"; 
       print "<label class='radio-inline'>"; 
        print "<input type='radio' name='q$i' value='-1'>No"; 
       print "</label>"; 
      print "</div>"; 
     print "</div>"; 
    } 
?> 

Javascript

$(function(){ 
    $('#questionaire-form').submit(function(e){ 
     e.preventDefault(); 
     var prevname = ""; 
     var questions = []; 
     $('.radio-inline').each(function(){ 
      //$(this).next($(this)).is(':checked'));    
      var curname = $(this).find('input[type="radio"]').attr('name'); 
      if(prevname == curname){ 
       if(!$(this).find('input[name='+curname+']').is(':checked') && $(this).closest('div').find('p').hasClass('text-danger')){ 
        return true; //skip to the next element 
       }else if(!$(this).find('input[name='+curname+']').is(':checked') && !$(this).closest('div').find('p').hasClass('text-danger')){ 
        $(this).closest('div').find('p').addClass('text-danger'); 
       }else if($(this).find('input[name='+curname+']').is(':checked') && $(this).closest('div').find('p').hasClass('text-danger')){ 
        $(this).closest('div').find('p').removeClass('text-danger'); 
       }else{ 
        $(this).closest('div').find('p').removeClass('text-danger'); 
       } 
      } 
      prevname = curname; 
     }); 
     var go; 
     $('.radio-inline').closest('div').find('p').each(function(){ 
      if($(this).hasClass('text-danger')){ 
       go = false; 
       return false; 
      }else{ 
       go = true; 
      } 
     }); 
     if(go){ 

     } 
    }); 
}); 

Si prega di chiedere per ulteriori informazioni, se necessario. Sono stato bloccato su questo per un po 'ora, e mi piacerebbe risolverlo rapidamente. convalida pulsante di scelta è sempre stata la mia debolezza, in modo da conquistare che oggi sarebbe grande

+1

Come sidenote: dovresti davvero guardare ai meccanismi dei modelli per separare la tua visione dalla tua altra logica. –

+0

puoi approfondire leggermente ciò che intendi? Sono curioso –

+1

Che cosa stai cercando di convalidare? Solo che una delle radiobox è selezionata per ogni gruppo? – Snuffleupagus

risposta

1

ne dite di questo:

var go = true; 
$(".form-group").each(function() { 
    if($(this).find('input[type="radio"]:checked').length == 0) { 
     //nothing checked so error. 
     $(this).find('p').addClass('text-danger'); 
     go = false; 
    } 
    else { 
     $(this).find('p').removeClass('text-danger'); 

    } 


}); 
if(!go) 
{return false;} 

//continue and do what you like 

UPDATE

testato in violino: http://jsfiddle.net/6k0nusfb/

+0

se il rosso sul paragrafo scompare solo se il pulsante no è selezionato –

+0

Il mio codice funziona perfettamente bene per me. Ho aggiunto un violino. –

+0

Ah, l'ho capito, avevo una riga in più del mio vecchio codice che giocherellava con le cose. Quindi il modo in cui l'ho capito è che finché un insieme di pulsanti radio ha lo stesso nome, condivideranno tutti la stessa proprietà verificata? –

Problemi correlati