2010-09-17 35 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()將工作得很好,但隨後您需要確保返回的集合中的元素是您實際需要的元素。 (假設你希望在頁面上創建多個表單,並且這些字段名稱會相互衝突,那麼這個時間就會到來,當然,除非你沒有把這個假設推出門外,否則它永遠不會發生,因此另一個開發人員會立即添加第二個表單到您剛剛提交的頁面。)