单选按钮在javascript函数中生成未定义的值

时间:2010-09-17 21:10:14

标签: javascript function radio-button

我正在尝试将单选按钮的值发送到javascript函数。最终这个函数会做更多但是我的测试已经走到了尽头,因为我一直得到一个未定义的返回值。这就是我所拥有的:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Untitled 1</title>
<SCRIPT TYPE="text/javascript">
 <!--
 function jobWindow(){
  var target;
  for( i = 0; i < document.jobView.sales.length; i++ ){
   if( document.jobView.sales[i].checked == true )
   target = document.jobView.sales[i].value;
   break;
  }
  alert( "val = " + target );
  //var load = window.open('target','','scrollbars=no,menubar=no,height=600,width=800,resizable=yes,toolbar=no,location=no,status=no');  
 }
 // -->
</script>

</head>

<body>

<form name="jobView">
<input name ="sales" value="all" type="radio" />All&nbsp;&nbsp;&nbsp;&nbsp;
<input name="sales" value="darell"  type="radio" />Darell&nbsp;&nbsp;&nbsp;&nbsp;
<input name="sales" value="kevin" type="radio" />Kevin&nbsp;&nbsp;&nbsp;&nbsp;
<input name="sales" value="brad" type="radio" />Brad&nbsp;&nbsp;&nbsp;&nbsp;
<input name="sales" value="chongo" type="radio" />Chongo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type="button" value="View Records" onclick="jobWindow()"/>&nbsp;&nbsp;&nbsp;&nbsp;
<input type="button" value="View Calendar" />
</form>

</body>

</html>

4 个答案:

答案 0 :(得分:4)

您真正想要的访问路径是:

var el = document.forms["jobView"].elements["sales"];

直点链(document.jobView.sales)对“all”集合进行隐式调用,该集合仅在IE中有效。 (是的,我知道当出现问题时Firefox会在其错误控制台中返回一个看起来相同的字符串,但你实际上无法在自己的代码中使用它。)getELementsByTagName()和getElementsByName()可以正常工作,但是您需要确保返回集合中的元素是您真正想要的元素。 (假设你想要在页面上创建多个表单的时候到了,那个字段名称就会发生冲突。当然,它永远不会发生,除非你没有把这个假设排除在门外,于是另一个开发人员将立即向您刚刚提交的页面添加第二个表单。)

答案 1 :(得分:3)

尝试document.getElementsByTagName这样:

 function jobWindow(){
  var myvalue;
  var el = document.getElementsByTagName('input');

  for( i = 0; i < el.length; i++ ){
   if (document.forms['jobView'].el[i].type === 'radio' && document.forms['jobView'].el[i].name === 'sales')
   {
     if(document.forms['jobView'].el[i].checked == true )
     {
       myvalue = document.forms['jobView'].el[i].value;
       break;
     }
   }
  }
  alert( "val = " + myvalue );
 }

另请注意,您的break行从未执行,因为您缺少大括号:

if( document.jobView.sales[i].checked == true )
{
   target = document.jobView.sales[i].value;
   break;
}

答案 2 :(得分:3)

document.jobView.sales 更改为 document.getElementsByName('sales')

答案 3 :(得分:1)

在那里抛出一些调试。例如,在for()语句中放置一个alert(),以确保它获得document.jobView.sales.length的定义。

如果它没有发出警报,你几乎可以打赌document.jobView.sales.length未定义。

然后,您可以try { var length = document.jobView.sales.length; } catch(e) { alert(e); }进行验证。

如果您确定未定义document.jobView.sales.length,则可能必须使用document.getElementsByTagName,然后循环播放document.jobView