2011-08-05 105 views
1

粗略地說,這是我的代碼:獲取複選框的值在JavaScript

<form name="mpform" id="mpform"> 
<input type="checkbox" onclick="mpfunc()" id="mpay" name="mpay[]" value="19" style="float:left;" /> 
//many of the above input tag - only the value changes with other numbers 
</form> 
<script type="text/javascript"> 
function mpfunc() 
{ 
var comp=0; 
document.getElementById("mpaydiv").style.visibility="visible"; 
for(var i=0; i< document.getElementById("mpform").elements['mpay[]'].length;i++){ 
if(document.getElementById("mpform").elements['mpay[]'][i].checked) 
comp = comp + document.getElementById("mpform").elements['mpay[]'][i].value; 
} 
document.getElementById("mpaydiv").innerHTML=comp; 
} 
</script> 
<div id="mpaydiv" style="position:fixed; right:0; visibility:hidden; bottom:0; border:1px solid black; background-color:white; padding:2px 2px;"></div></div> 
    </div> 

    <div id="footer"></div> 
</div> 

我試圖與形式取代的getElementById(「mpform」)[0],mpform和其他人,但我似乎無法訪問值。隨着目前getelementid我得到

Error: document.getElementById("mpform") is null Source File: index.php?page=fakturi Line: 3938

與mpform我得到mpform是未定義與形式[0] 請幫助。我如何獲得所有選中複選框的值的總和?

回答

1

我似乎記得IE瀏覽器與形式數組的索引有問題。您可以通過document.getElementsByName("mpform")[0]document.forms['mpform']訪問它。要獲得複選框的後代,您可能會使用getElementById('mpay')document.getElementsByName("mpay")[0]document.getElementsByName("mpform")[0].elements[0]

+0

錯誤:document.forms.mpform未定義 源文件:的index.php? page = fakturi Line:3938 錯誤:document.getElementsByName(「mpform」)[0]未定義 源文件:index.php?page = fakturi Line:3938 即使我使用FireFox,我仍嘗試過它 – DreamWave

+0

您確定該表單實際上存在嗎?當你做CTRL + U時你看到了什麼? – cwallenpoole

+0

謝謝你讓我看看我的代碼。我有一個以前的表單標籤沒有關閉。 – DreamWave

1

應該是這樣

 <form name="mpform" id="mpform"></form> 
+0

是的,對不起,我改變了它。相同的結果,但: 錯誤:document.getElementById(「mpform」)爲空 源文件:index.php?page = fakturi 行:3938 – DreamWave

1

表單的ID必須是mpform。你有名字=「mpform」。添加id =「mpform」。

另外,爲了提高效率,你應該改變你的功能。使用多個getElementById來抓取相同的元素效率非常低。

<script type="text/javascript"> 
function mpfunc() 
{ 
    var comp=0; 
    document.getElementById("mpaydiv").style.visibility="visible"; 
    var elements = document.getElementById("mpform").elements; 
    for(var i=0; i< elements.length;i++){ 
     if(elements[i].type == 'checkbox' && elements[i].checked) 
     comp = comp + parseInt(elements[i].value); 
    } 
    document.getElementById("mpaydiv").innerHTML=comp; 
} 
</script> 
+0

是的,對不起,我改變了它。相同的結果雖然: 錯誤:document.getElementById(「mpform」)爲空 源文件:index.php?page = fakturi 行:3938 – DreamWave

+0

隨着功能的變化,我得到這個:Error:document.getElementById(「 mpform「)爲空 源文件:index.php?page = fakturi 行:3938 – DreamWave

+0

我剛剛編輯了我的腳本。我相信問題在於你訪問元素的方式。我剛剛測試了我剛剛發佈的HTML代碼,現在它可以工作。 – Kyle

1

你試圖讓元素通過標識,但你爲它指定一個名稱。

<form id="mpform"> 
+0

是的,很抱歉我改變了它。同樣的結果,但: 錯誤:的document.getElementById( 「mpform」)爲空 源文件:index.php頁面= fakturi 線:3938 – DreamWave

1

該函數可能在表單元素加載完成之前運行?嘗試運行該功能作爲window.onload事件的一部分。

1

我剛剛試過這個使用你的html代碼,它似乎工作。我編輯了我的答案以上顯示,但也張貼它作爲另一個答案,以確保你看到。

<script type="text/javascript"> 
function mpfunc() 
{ 
    var comp=0; 
    document.getElementById("mpaydiv").style.visibility="visible"; 
    var elements = document.getElementById("mpform").elements; 
    for(var i=0; i< elements.length;i++){ 
     if(elements[i].type == 'checkbox' && elements[i].checked) 
     comp = comp + parseInt(elements[i].value); 
    } 
    document.getElementById("mpaydiv").innerHTML=comp; 
} 
</script>