2014-06-27 41 views
1

Hiall,AJAX加載單個複選框表示udefined上JavaScript驗證

我有簡單的HTML FROM

<form id="adda" name="adda" method="post" action=""> 

    Select Batch :<br/> 

    <select name="standard" id="standard" onchange="return changestudent(this.value);" > 

     <option value="0">-Select Batch-</option> 

     <option value="1">BatchName1</option> 
       <option value="2">BatchName2</option> 
    </select> 


    Students : 

    <div id="s"> 

    <input type="checkbox" name="sname" value="<?=$raw2['Id']?>" /><?=$raw2['FirstName']?> <?=$raw2['LastName']?><br /> 

    </div> 

    <input type="button" value="Add" onclick="return val();" style="width:80px; height:28px; color:#8A4E00; background-color:#8bc33f;cursor:pointer;margin-left:10px;" /> <? } ?> 


    <input type="hidden" name="hsid" id="hsid" value="" /> 

    <input type="hidden" name="sub" id="sub" value="1" /> 

    </form> 

下拉的平變化我已被創建AJAX內容稱爲javascript函數changestudent(),顯示的列表那批學生用ckeckboxes。這裏是AJAX功能

<script> 
function changestudent(stdid) 
{ 



    var strName="Msxml2.XMLHTTP" 

      if (window.XMLHttpRequest) 

      { // Mozilla, Safari, ... 

       xmlhttp = new XMLHttpRequest(); 

      } 

      else if (window.ActiveXObject) 

      { // IE 

       xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 

      } 



      xmlhttp.open('GET', 'changestudent.php?stdid='+stdid+'&table=studentdetail', true); 

      xmlhttp.onreadystatechange = showsub; 

      xmlhttp.send(null); 

} 

function showsub() 

{ 

if (xmlhttp.readyState == 4) 

{ 

    str = xmlhttp.responseText; 



    document.getElementById("s").innerHTML = str; 

} 

} 


    </script> 

我的問題是,當阿賈克斯返回單個複選框javascript函數我用來驗證表單顯示,複選框不確定的。

這裏是我用來驗證表單

<script type="text/javascript"> 
function val() 

{ 



    if(document.adda.standard.value=="0") 

    { 

     alert("Please Select Batch"); 

     document.adda.standard.focus(); 

     return false; 

    } 


var cnt = 0; 



    for(var i = 0;i < document.adda.sname.length;i++) 

    { 

     //alert("1"); 

     if(document.adda.sname[i].checked==true) 

     { 

      document.adda.hsid.value = document.adda.hsid.value+','+document.adda.sname[i].value; 

      cnt = cnt+1; 

     } 

    } 

    if(cnt==0) 

    { 

    alert("Please Select Student"); 

    return false; 

    } 

    document.adda.submit(); 

任何一個可以幫助我理清了這一點javacript功能?在此先感謝

回答

0

問題是document.adda.sname如果有多個複選框與該名稱返回一個類似數組的對象,但如果只有一個,那麼它會返回複選框對象本身(所以你不能使用[i]語法時這裏只有一個。

的解決方案是使用別的東西搶複選框,如querySelectorAll,這將始終返回喜歡的對象數組,不管有多少被發現。

var checkboxes = document.querySelectorAll('form[name=adda] input[name=sname]'); 

for(var i=0; i<checkboxes.length; i++){ 
    if(checkboxes[i].checked){ 
     document.adda.hsid.value = document.adda.hsid.value+','+ checkboxes[i].value; 
     cnt = cnt+1; 
    } 
} 
+0

等待IM編輯代碼它的錯誤 – user3782114

+0

現在檢查我已更正的代碼 – user3782114

+0

它取決於從下拉列表中選擇的值,它顯示undefined當ajax函數返回單個複選框,因爲我上面顯示的HTML表格 – user3782114