下面的例程在Mozilla中完美运行,但在IE中却没有(我使用了9但是已经改变了兼容模式,它在7和8中也被破坏了)。
我知道这与e.type中的'undefined'在IE中有关,在Moz中很好,但不知道正确的语法应该是什么来满足两者。
function changeChartColumns(){
var myArray = [];
var k = 1;
var b = 0;
myArray[0]=0;
for (b in document.frm_obj.elements) {
var e = document.frm_obj.elements[b];
if ( e.type=="checkbox" ) {
if(e.checked == true){
var at_least_one_checked = true;
myArray[k] = parseInt(e.value,10);
k = k+1;
}
}
}
if(at_least_one_checked == true){
return myArray;
}else{
alert("I cannot display zero information. Please select some stuff using the checkboxes.");
stop_script_running; // horrible hack
}
}
这是HTML:
<form name="frm_obj" id="frm_obj" method="post">
<table>
<tr>
<td><input type="checkbox" name="list" value="2" checked onClick="changeChartColumns();"></td>
<td>Option 1</td>
<td><input type="checkbox" name="list" value="3" checked onClick="changeChartColumns();"></td>
<td>Option 2</td>
<td><input type="checkbox" name="list" value="4" checked onClick="changeChartColumns();"></td>
</table>
</form>
提前致谢。小时。
答案 0 :(得分:1)
使用正确的for
循环:
for (var i=0; i < document.frm_obj.elements.length; i++) {
工作演示:http://jsfiddle.net/y7xFz/1
for...in
旨在迭代对象的所有可枚举属性。 document.frm_obj.elements
返回一个HTMLCollection,其可枚举属性在浏览器之间有所不同。通常,您不应在数组和HTMLCollections上使用for...in
- 仅保留用于具有命名属性的对象映射。
答案 1 :(得分:0)
也许尝试使用getAttribute()
。
答案 2 :(得分:0)
(b.type ==“checkbox”)
[另外,] at_least_one_checked在本地if块中定义。
答案 3 :(得分:0)
在您的代码中替换以下行
for (b in document.frm_obj.elements) {
这一个
for (b in document.body.getElementsByTagName("input")) {
这样它也可以在IE中使用。