2012-04-23 31 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