2011-08-05 72 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>