我有这段代码:
<script>
function toggle(source) {
checkboxes = document.getElementsByName('DG1');
for each(var checkbox in checkboxes)
checkbox.checked = source.checked;
checkboxes = document.getElementsByName('DG2');
for each(var checkbox in checkboxes)
checkbox.checked = source.checked;
checkboxes = document.getElementsByName('DG3');
for each(var checkbox in checkboxes)
checkbox.checked = source.checked;
checkboxes = document.getElementsByName('DG4');
for each(var checkbox in checkboxes)
checkbox.checked = source.checked;
checkboxes = document.getElementsByName('DG5');
for each(var checkbox in checkboxes)
checkbox.checked = source.checked;
}
</script>
<input type="checkbox" onClick="toggle(this)" />Select All<br/>
<form method=POST action="DGUsageServlet">
<input type="checkbox" name="DG1">DG1</input>
<input type="checkbox" name="DG2">DG2</input>
<input type="checkbox" name="DG3">DG3</input>
<input type="checkbox" name="DG4">DG4</input>
<input type="checkbox" name="DG5">DG5</input>
</form>
如何让上述脚本在IE中运行?
答案 0 :(得分:43)
请注意,Firefox不再支持每个循环,因此这适用于每个浏览器,而不仅仅是Internet Explorer。 See this MDN article for alternatives
Internet Explorer不支持“for each”循环(以及其他现代浏览器,它们已经不再支持它们)。您需要更改代码以使用常规for循环:
function toggle(source) {
var checkboxes = document.getElementsByName('DG1');
for (var i = 0; i < checkboxes.length; i++) {
checkboxes[i].checked = source.checked;
}
...
}
或者,您可以使用像jQuery这样的库,并按照以下方式执行:
function toggle(source) {
$("input[name^=DG]").attr("checked", source.checked);
}
答案 1 :(得分:14)
或者您可以尝试为不支持foreach方法的浏览器扩展Array对象,如下所示: https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference:Objects:Array:forEach#Compatibility
答案 2 :(得分:6)
我认为 jQuery.each 是最佳解决方案
var idArr = ["LocationFirst","LocationSecond","LocationThird","LocationFourth","LocationFifth"];
$.each(idArr,function(index, entry) {
//some code
});
它将迭代数组“idArr”中的所有元素,并且可以对每个元素做一些事情。
答案 3 :(得分:4)
原生IE8已经过时了 foreach ,但我如何使用jQuery,我选择 jQuery.each 来克服这个问题。
我从jQuery API Doc复制并粘贴:
var obj = {
"flammable", "inflammable"
"duh": "no duh"
};
$. each (obj, function (key, value) {
alert (key + ":" + value);
});
答案 4 :(得分:3)
可以在Internet Explorer中为每个使用修改后的形式,语法如下。
var checkboxes = document.getElementsByName('DG2');
for (var i in checkboxes)
checkboxes[i].checked = 'true';
答案 5 :(得分:3)
我在IE 11上遇到了forEach的问题
我找到了像这样的解决方案
Array.prototype.slice.call(document.getElementsByName('element_name')).forEach(function (el) {
if (el.checked) {
console.log('checked');
}
这对我很有用。
答案 6 :(得分:2)
要完成Matthew Crumley的回答,您可能还会遇到IE中getElementByName()
失败的问题,解释here:
很少使用的
getElementsByName()
方法是DOM Level 1规范的一部分,并且受Internet Explorer和Mozilla / Firefox支持。 getElementsByName()根据HTML 4.01规范,支持NAME属性的唯一元素是
BUTTON, TEXTAREA, APPLET, SELECT, FORM, FRAME, IFRAME, IMG, A, INPUT, OBJECT, MAP, PARAM and META
。因此,在NAME
中放置DIV
实际上是无效的HTML。
(因此它适用于您的情况(NAME
字段的INPUT
),但在IE中使用它是不安全的)
Moz / Firefox对此没有任何问题,并且很乐意返回所有三个DIV元素。但是,MSIE将其视为expando attribute无效的
NAME
属性,并排除了这些元素
this script给出了可能的解决方法。
注意:当您编码for
时,alwatys会添加封闭的卷曲括号{ and }
:它更安全。如果您在循环中添加第二行代码,则for
块会将其考虑在内。
答案 7 :(得分:1)
您可以使用:
[].slice.call(...).forEach(...);
示例:
[].slice.call( document.querySelectorAll('h1') ).forEach(function(h1) {
console.log(h1);
});
或者最好加一遍:
// make IE9+ support forEach:
if (window.NodeList && !NodeList.prototype.forEach)
NodeList.prototype.forEach = Array.prototype.forEach;
,然后始终使用紧凑语法:
document.querySelectorAll('h1').forEach(function(h1) {
console.log(h1);
});
答案 8 :(得分:0)
我会稍微清理一下。
function select(){
var butt = document.getElementById('selectall');
butt.onclick = selectall;
function selectall(){
for(var i=1;i<6;i++){
var id='DG'+i;
var all = document.getElementById(id);
all.setAttribute('checked','checked');
}
}
}
但它仅适用于getElementById()(而不是getElementsByName(),我不明白)。只需添加到每个输入id ='selectall',id ='DG1'...