2012-05-19 20 views
6

Tengo una lista de casillas de verificación dentro de una tabla con una función jQuery simple que permite al usuario hacer clic en cualquier lugar de la fila de la tabla para marcar/desmarcar la casilla de verificación. Funciona muy bien, excepto cuando el usuario realmente hace clic en la casilla de verificación. No funciona entonces. ¿Algunas ideas? Aquí está mi código:¿Cómo evito que el evento checkbox predeterminado anule mi función jQuery check/uncheck?

HTML:

<tr onClick="checkBox()">...</tr> 

jQuery:

function checkBox() { 

var ischecked = $('input#myContacts').attr("checked"); 

if(ischecked) 
{ 
    $('input#myContacts').attr("checked", false); 
} 
else 
{ 
    $('input#myContacts').attr("checked", true); 
} 

return false; 
} 
+1

¿dónde está la casilla de verificación '# myContacts'? publicar html detallado –

+0

@John Anderson: Alexander tiene un punto; Hay más de una solución válida aquí. Si necesita más aclaraciones, solicítelo, de lo contrario acepte una respuesta. – Grezzo

Respuesta

8

Puede usar event.stopPropagation para evitar que el evento de clic de input#myContacts se propague al evento de clic de tr. Además, no puedo creer que estés mezclando jQuery y DOM de esa manera todavía, cuando deberías estar usando jQuery Events.

$(document).ready(function(){ 
    $("input#myContacts").click(function(e){ 
    e.stopPropagation(); 
    }); 
}); 
+0

Otra solución (que utiliza menos secuencias de comandos) es hacer que la secuencia de comandos se active solo cuando se hace clic en la etiqueta, en lugar de hacerlo en toda la fila que contiene la casilla de verificación. – Grezzo

+0

¡Muchas gracias por su ayuda! Soy un novato jQuery. –

0

Sin el código HTML que muestra por qué esa función se activa por que es difícil de decir. Un jsFiddle sería útil. Solo especulación, pero ¿podría ser que haga clic en la casilla de verificación, que lo verifica, pero el evento de clic llama inmediatamente a esa función que lo desmarca?

+0

Acabo de actualizar el código para mostrar cómo llamo a la función desde el html. –

+0

Aún no me has enseñado lo más importante; Es su casilla de verificación dentro del . Estoy seguro de que así es, y ese es tu problema. Mira aquí para ver si tengo la idea correcta: http://jsfiddle.net/qmdGK/. Si lo hago, es exactamente lo que sugerí más arriba, está funcionando, luego (debido a su secuencia de comandos) desactivándolo antes de que pueda verlo cambiar. El tipo de solución que está buscando es vincular ese evento de clic a un que contiene una etiqueta junto a un que contiene su casilla de verificación, o detener el evento de clic en el burbujeando hasta el . Para evitar el burbujeo: http://api.jquery.com/event.stopPropagation/ – Grezzo

+0

Se agotaron los caracteres ... Intentaba crear jsFiddles de la solución, pero estoy a punto de encontrarme con alguien para escalar durante días, así que no tengo tiempo ahora Quizás cuando regrese esta tarde (hora del Reino Unido) podría ir si todavía no tienes una solución. – Grezzo

0
<tr class="checkBox">...</tr> 


    $(document).ready(function() { 
     $('tr.checkBox').live('click', function (e) { 
      if (e.target.type !== 'checkbox') { 
       $('input#myContacts').attr("checked", function() { 
        return !$(this).prop('checked'); 
       }); 

       //Or 

       $(this).find('input#myContacts').attr("checked", function() { 
        return !$(this).prop('checked'); 
       }); 
      } 
     }); 
    }); 
Cuestiones relacionadas