2012-05-19 13 views
6

Ho un elenco di checkbox all'interno di una tabella con una semplice funzione jQuery che consente all'utente di fare clic in qualsiasi punto della riga della tabella per selezionare/deselezionare la casella di controllo. Funziona alla grande, tranne quando l'utente fa effettivamente clic sulla casella di controllo. Allora non funziona. Qualche idea? Qui è il mio codice:Come posso evitare che l'evento di casella di controllo predefinito ignori la funzione jQuery check/deseleziona?

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

dove si trova la casella di controllo '# myContacts'? post dettagliato html –

+0

@ John Anderson: Alexander ha un punto; C'è più di una soluzione valida qui. Se hai bisogno di ulteriori chiarimenti, ti preghiamo di richiederlo, altrimenti accetta una risposta. – Grezzo

risposta

8

È possibile utilizzare event.stopPropagation per evitare che l'evento click di input#myContacts si propaga all'evento click di tr. Inoltre, non posso credere che stai mescolando jQuery e DOM in quel modo ancora, quando dovresti usare jQuery Events.

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

Un'altra soluzione (l'utilizzo di meno script) consiste nel far sì che lo script venga attivato solo quando si fa clic sull'etichetta, anziché sull'intera riga contenente la casella di controllo. – Grezzo

+0

Grazie mille per il tuo aiuto! Sono un principiante jQuery. –

0

Senza il codice HTML che mostra il motivo per cui tale funzione è innescato da è difficile da dire. Un jsFiddle sarebbe utile. Solo la speculazione, ma potrebbe essere che si fa clic sulla casella di controllo, che lo controlla, ma l'evento click chiama immediatamente quella funzione che deseleziona?

+0

Ho appena aggiornato il codice per mostrare come chiamo la funzione dall'interno di html. –

+0

Ancora non mi hai mostrato la cosa più importante; La tua casella di controllo è all'interno dello . Sono sicuro che lo sia, e questo è il tuo problema. Vedi qui per verificare se ho l'idea giusta: http://jsfiddle.net/qmdGK/. Se lo faccio, è esattamente quello che ho suggerito sopra, è il ticchettio, quindi (a causa del tuo script) è unticking prima che tu possa vederlo cambiare. Il tipo di correzione che stai cercando è vincolare l'evento click a contenente un'etichetta accanto a uno contenente la casella di controllo oppure interrompere l'evento click sullo che bolle fino allo . Per evitare il bubbling: http://api.jquery.com/event.stopPropagation/ – Grezzo

+0

Esaurito i personaggi ... proverei a creare jsFiddles della soluzione, ma sto per incontrare qualcuno per un giorno di scalata, quindi non ho il tempo adesso Forse quando tornerò questa sera (ora del Regno Unito) potrei andare se non avessi ancora una soluzione. – 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'); 
       }); 
      } 
     }); 
    }); 
Problemi correlati