Tengo una función que se llama mediante un enlace que debe marcar varias casillas de verificación que existen dentro de un div específico (pasado a la función). Funciona en todos los navegadores excepto IE (7.) Hasta donde puedo decir .attr ('marcado', 'marcado' es la forma correcta de hacer esto usando jquery 1.5.1

function selectall(industry){
    $("#"+industry+"Apps :checkbox").attr('checked', 'checked');
    $("#"+industry+"Apps :checkbox").change(); /* used for jqtransform plugin */
    }   

¿Hay algo que me falta o una mejor manera de hacer esto que funcione en todos los navegadores? Realmente no me importa anular la selección, solo seleccionar.

HTML se parece a

<div id = 'HealthcareApps'>
<div style="clear: both;">
    <a href = "javascript:selectall('Healthcare');">Select all</a>
</div>
<ul>
    <li><label for="id_Healthcare_0"><input type="checkbox" name="Healthcare" value="1" id="id_Healthcare_0" /> Simple Messaging</label></li>
    <li><label for="id_Healthcare_1"><input type="checkbox" name="Healthcare" value="2" id="id_Healthcare_1" /> Mobile Alerts and Alarms</label></li>
    <li><label for="id_Healthcare_2"><input type="checkbox" name="Healthcare" value="3" id="id_Healthcare_2" /> Patient Identification / Drug Conflicts</label></li>
</ul>

(sí, sé que los estilos en línea son una idea horrible. Lo arreglaré también si alguna vez puedo hacer que este enlace funcione en IE).

4
nando 22 ago. 2011 a las 21:26

5 respuestas

La mejor respuesta

Puede intentar algo como esto: js fiddle demo

<div id = 'HealthcareApps'>
<div style="clear: both;">
    <a href="#" id="selectall" class="Healthcare" >Select all</a>
</div>
<ul>
    <li><label for="id_Healthcare_0"><input type="checkbox" name="Healthcare" value="1" id="id_Healthcare_0" /> Simple Messaging</label></li>
    <li><label for="id_Healthcare_1"><input type="checkbox" name="Healthcare" value="2" id="id_Healthcare_1" /> Mobile Alerts and Alarms</label></li>
    <li><label for="id_Healthcare_2"><input type="checkbox" name="Healthcare" value="3" id="id_Healthcare_2" /> Patient Identification / Drug Conflicts</label></li>
</ul>
</div>

Jquery:

$('#selectall').click(function(e) {
    e.preventDefault();
    var industry = $(this).attr("class");
    $("#" + industry + "Apps :checkbox").attr('checked', 'checked');
});

Y, para activar y desactivar:

$('#selectall').click(function(e) {
    e.preventDefault();
    var industry = $(this).attr("class");
    var checkbox = $("#" + industry + "Apps :checkbox");
    checkbox.attr('checked', !checkbox.attr('checked'));
});

js fiddle toggle demo

1
jk. 23 ago. 2011 a las 17:38

Intente usar click () en lugar de change (). Esto parece ser un error de IE7:

Problemas de IE7 con mi jQuery [haga clic y cambie las funciones]

0
Community 23 may. 2017 a las 12:19

En su marcado, el div 'HealthcareApps' no tiene una etiqueta de cierre. Quizás esta es una omisión de copiar / pegar, pero si no lo es, entonces el marcado inválido podría ser la razón, especialmente porque es IE7 el que se queja.

0
karim79 22 ago. 2011 a las 17:39

Tratar $ ("#" + industria + "Entrada de aplicaciones: casilla de verificación"). attr ('marcado', 'marcado');

No tengo tiempo para verificar esto (en el trabajo :)) pero tengo una sospecha furtiva que ayudará, es decir, a resolverlo

0
SipSop 22 ago. 2011 a las 17:32

Prueba esto

function selectall(industry){
    $("#"+industry+"Apps :checkbox").attr('checked', true);
    $("#"+industry+"Apps :checkbox").change(); /* used for jqtransform plugin */
}  

Si usa jQuery 1.6+, puede usar prop

$("#"+industry+"Apps :checkbox").prop('checked', true);
0
ShankarSangoli 22 ago. 2011 a las 17:28