2012-04-23 32 views
0

這是我的javascript:getElementsByName返回undefined

<script type="text/javascript"> 
    var crct_answrs = new Array(<?php echo implode(',', $crct_ans); ?>); 
    var answrs = new Array(); 

    function check_ans(){ 
     for(var i = 1; i < 11; i++){ 
      var tst = "ques"+i; 
      var radio = document.getElementsByName(tst); 
      for (var x = 0; x < radio.length; x ++) { 
       if (radio[x].checked) { 
        answrs = radio.value; 
       } 
      } 
     }  
    } 
</script> 

這是HTML的一部分:

<form> 
      <div id="quest1" class="question"> 
       <div class="prblm"> 
        <?php echo $questions[1]; ?></div> 
       <table class="answrs"> 
        <tr> 
         <td><?php echo $answrs[1][1]; ?></td> 
         <td><input name="ques1" type="radio" value="1"></td> 
        </tr> 
        <tr> 
         <td><?php echo $answrs[1][2]; ?></td> 
         <td><input name="ques1" type="radio" value="2"></td> 
        </tr> 
        <tr> 
         <td><?php echo $answrs[1][3]; ?></td> 
         <td><input name="ques1" type="radio" value="3"></td> 
        </tr> 
        <tr> 
         <td><?php echo $answrs[1][4]; ?></td> 
         <td><input name="ques1" type="radio" value="4"></td> 
        </tr> 
       </table> 
      </div> 

我有10個相同的圖案div標籤與表和input名稱是相應地改變。 check_ans()onclick上運行。但所有時間getElementsByName返回未定義。爲什麼會這樣。請幫幫我。謝謝!

+0

它不會爲我返回'undefined':http://jsfiddle.net/jDx69/ – 2012-04-23 21:13:42

+0

事實上,就像@FelixKling所說的,'getElementsByname'永遠不會返回'undefined'。 – 2012-04-23 21:17:09

+0

我可以把我的整個代碼放在這裏嗎? – 2012-04-23 21:21:27

回答

3

你的錯誤在於:

if (radio[x].checked) { 
    answrs = radio.value; 
} 

answrs是一個數組,需要的值設置爲相應的迭代器這是對的指數。 radio.value正在嘗試訪問radio數組的值,但也忽略了它的索引。看看我的解決方案下面的修補程序:


我有一個jsFiddle工作。

的JavaScript:

var answrs = []; 

function check_ans() { 
    for (var i = 1; i <= 10; i++) { 
     var radio = document.getElementsByName("ques" + i); 
     for (var x = 0; x < radio.length; x++) { 
      if (radio[x].checked) { 
       answrs[i-1] = radio[x].value; 
      } 
     } 
    } 
    console.log(answrs); 
}​ 

輸出:

當選擇一個答案1,2,3,4,3,2,1,2,3,4,用於問題1- 10陣列是:

["1", "2", "3", "4", "3", "2", "1", "2", "3", "4"] 
+0

我的代碼有什麼錯誤?我仍然無法修復它。 – 2012-04-23 21:35:10

+0

我更新了我的答案,並在頂部解釋了您的錯誤。 – 2012-04-23 21:38:31

+0

謝謝。現在它正在工作! – 2012-04-23 21:40:41

0

嗯。這工作對我來說(我已經刪除了一些PHP代碼)

<html> 
<head> 
<script type="text/javascript"> 
    var crct_answrs = new Array(); 
    var answrs = new Array(); 

    function check_ans(){ 

     for(var i = 1; i < 11; i++){ 
      var tst = "ques"+i; 

      var radio = document.getElementsByName(tst); 
      alert(radio); 
      for (var x = 0; x < radio.length; x ++) { 
       if (radio[x].checked) { 
        answrs = radio.value; 
       } 
      } 
     }  
    } 
</script> 
</head> 
<body> 
<button type="button" onclick="check_ans();">test</button> 
      <div id="quest1" class="question"> 
       <div class="prblm"> 
        <?php echo $questions[1]; ?></div> 
       <table class="answrs"> 
        <tr> 
         <td><?php echo $answrs[1][1]; ?></td> 
         <td><input name="ques1" type="radio" value="1"></td> 
        </tr> 
        <tr> 
         <td><?php echo $answrs[1][2]; ?></td> 
         <td><input name="ques1" type="radio" value="2"></td> 
        </tr> 
        <tr> 
         <td><?php echo $answrs[1][3]; ?></td> 
         <td><input name="ques1" type="radio" value="3"></td> 
        </tr> 
        <tr> 
         <td><?php echo $answrs[1][4]; ?></td> 
         <td><input name="ques1" type="radio" value="4"></td> 
        </tr> 
       </table> 
      </div> 

<body/> 
</html> 

與你的代碼有什麼不同嗎?警報呼叫顯示值。

-1

我有時會得到一個未定義的var,分配給document.getElementsByName(name)

所以我會嘗試看看網絡上的任何答案是否有幫助。唉,沒有任何工作。

所以我繼續測試我認爲我應該得到的數組。和元素在那裏。所以只要忽略'undefined'並繼續處理var。

+0

這不是真的回答這個問題。另外,正如接受的答案所說,「document.getElementsByName」不應該返回「undefined」 – 2012-10-20 21:49:29