2010-09-17 81 views
1

我试图将单选按钮的值发送给javascript函数。最终,函数会做更多的事情,但我的测试已经到了死胡同,因为我一直得到未定义的返回值。以下是我有:在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> 

回答

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; 
} 
+0

我添加了缺少的大括号,它工作。谢谢你的收获 – shinjuo 2010-09-17 21:34:51

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

3

变化document.jobView.salesdocument.getElementsByName('sales')

4

的您实际需要的访问路径为:

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

直点链(document.jobView.sales)会隐式调用“all”集合,该集合只能在IE中工作。 (是的,我知道当事情出错时,Firefox在错误控制台中返回一个看起来完全相同的字符串,但是您不能在自己的代码中实际使用它)。getELementsByTagName()和getElementsByName()将工作得很好,但随后您需要确保返回的集合中的元素是您实际需要的元素。 (假设你希望在页面上创建多个表单,并且这些字段名称会相互冲突,那么这个时间就会到来,当然,除非你没有把这个假设推出门外,否则它永远不会发生,因此另一个开发人员会立即添加第二个表单到您刚刚提交的页面。)