2014-12-15 37 views
7

Bir uygulamaya başlamak için kullandığım bu anketi kullanıyorum. Ben göndermeden önce doğrulamak için javascript kullanıyorum, ancak her soruda yalnızca ikinci düğmeyi doğrulama ve her soruyu tek tek doğrulamayan bir sorunla karşılaşıyorum. Aşağıda kod yazdım.Radyo düğmeleri doğru şekilde doğrulamıyor

Anket

<? 
    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){ 

     } 
    }); 
}); 

gerekirse daha fazla bilgi isteyin. Bir süredir bunun üzerinde sıkışıp kaldım ve çabucak çözmek istiyorum. Radyo düğmesi doğrulama her zaman benim zayıflık olmuştur, bu yüzden bu bugün fetih iyi olurdu

+1

:

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 

GÜNCELLEME

keman test edilmiştir: Görüşünüzü diğer mantığınızdan ayırmak için templasyon mekanizmalarına bakmalısınız. –

+0

Ne demek istediğin hakkında biraz daha derinliklere girebilir misin? Merak ediyorum –

+1

Tam olarak ne doğrulamaya çalışıyorsunuz? Her grup için radyo kutularından biri işaretli mi? – Snuffleupagus

cevap

1

bu konuda nasıl bir not olarak http://jsfiddle.net/6k0nusfb/

+0

nolu paragrafın üzerindeki kırmızı renkte sadece düğme yok ise –

+0

kodum kayboluyor. Benim kodum benim için gayet iyi çalışıyor. Bir keman ekledim. –

+0

Ah anladım, eski kodumdan şeyler ile uğraşmaktan başka bir satırım vardı. Öyleyse, anladığım kadarıyla bir dizi radyo düğmesi aynı ismi paylaştığı sürece, hepsi aynı kontrol edilen mülkü doğru olarak paylaşacaklar mı? –

İlgili konular