internet - para cada soporte de JavaScript en IE?
instalar javascript (8)
Internet Explorer no admite "para cada" bucles. Tendrá que cambiar el código para usar los bucles normales para:
function toggle(source) {
var checkboxes = document.getElementsByName(''DG1'');
for (var i = 0; i < checkboxes.length; i++) {
checkboxes[i].checked = source.checked;
}
...
}
O bien, podría usar una biblioteca como jQuery y hacerlo así:
function toggle(source) {
$("input[name^=DG]").attr("checked", source.checked);
}
Editar: Además, la forma en que está usando "para cada uno" no siempre hará lo que quiera, incluso en Firefox. Al igual que "para (clave en el objeto)" bucles, "para cada uno" itera sobre todas las propiedades del objeto, incluidas las propiedades de su prototipo . Realmente está hecho para iterar sobre las propiedades del objeto, no sobre las matrices.
En JavaScript 1.7 puede crear un iterador que funciona correctamente con matrices como esta:
for each (let [i, checkbox] in Iterator(checkboxes)) {
checkbox.checked = source.checked;
}
Por supuesto, esto solo funciona en Firefox 2.0+.
Tengo este código:
<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>
¿Cómo puedo hacer que el script anterior funcione en IE?
Lo limpiaría un poco.
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'');
}
}
}
Pero funciona solo para getElementById () (y no getElementsByName (), lo que no entiendo). Solo agregue a cada entrada id = ''selectall'', id = ''DG1'' ...
Para completar la respuesta de Matthew Crumley, también puede tener un problema con el error getElementByName()
en IE, que se explica aquí :
El método
getElementsByName()
poco utilizado es parte de la especificación DOM Level 1 y es compatible con Internet Explorer y Mozilla / Firefox. getElementsByName ()Según la especificación HTML 4.01, los únicos elementos que admiten atributos NAME son
BUTTON, TEXTAREA, APPLET, SELECT, FORM, FRAME, IFRAME, IMG, A, INPUT, OBJECT, MAP, PARAM and META
. Entonces, colocar unNAME
dentro de unDIV
es en realidad un HTML no válido.
(Por lo tanto, funcionará en su caso ( NAME
de un campo INPUT
), pero no es seguro usarlo en IE)
Moz / Firefox no tiene un problema con esto y felizmente devolverá los tres elementos DIV. Pero MSIE lo trata como el atributo
NAME
no válido como un atributo expando y excluye esos elementos
Una posible solución se da con este script .
Nota: cuando está codificando un, alwatys add entonces encierra los corchetes de curling { and }
: es más seguro. Si agrega una segunda línea de código en su ciclo, el bloque for
lo tendrá en cuenta.
O puede tratar de extender el objeto Array para navegadores que no son compatibles con el método foreach, como se sugiere aquí: https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference:Objects:Array:forEach#Compatibility
Es posible utilizar una forma modificada de cada uno en Internet Explorer, la sintaxis es la siguiente.
var checkboxes = document.getElementsByName(''DG2'');
for (var i in checkboxes)
checkboxes[i].checked = ''true'';
Nativamente IE8 está fuera de fecha para foreach , pero cómo uso jQuery, opté por jQuery.each para superar este problema.
Mi copiar y pegar de jQuery API Doc:
var obj = {
"flammable", "inflammable"
"duh": "no duh"
};
$. each (obj, function (key, value) {
alert (key + ":" + value);
});
Creo que jQuery.each es la mejor solución para ello
var idArr = ["LocationFirst","LocationSecond","LocationThird","LocationFourth","LocationFifth"];
$.each(idArr,function(index, entry) {
//some code
});
iterará sobre todos los elementos en la matriz "idArr" y puede hacer algo con cada elemento.
Tuve un problema con forEach en IE 11
Y he encontrado una solución alternativa como esa
Array.prototype.slice.call(document.getElementsByName(''element_name'')).forEach(function (el) {
if (el.checked) {
console.log(''checked'');
}
Me está funcionando bien.