2015-06-17 11 views
5

Ho una tabella ancora:con una casella di controllo di input all'interno di una riga della tabella, posso aggiungere evento click per remare ed essere in grado di fare clic di ingresso

<table> 
    <tr> 
    <td>Something</td> 
    <td>Something Else</td> 
    <td><input type='checkbox' value='clickme' id='yes'></td> 
    </tr> 

Per l'utente, se si clicca sulla riga, che ottengono più dati sulla riga e se fanno clic sulla casella di controllo, vengono presentati con altre opzioni. come posso ascoltare per ogni evento in jQuery. Il mio problema è che il clic per casella spara ovviamente il via alla manifestazione per la riga clicca

$('tr').click(function(){ 
    alert('you clicked the row'); 
}); 
$('#yes').change(function(){ 
     alert('you clicked the checkbox'); 
}); 

se l'elemento è stato creato in modo dinamico, sarebbe questo lavoro:

 $('#someTableId').on('click','#yes',function(e){ 
      alert($(this).attr('id')); 
      e.stopPropagation(); 
    }); 

Update: la risposta alla parte 2 di sì.

+0

Nel gestore di clic per la riga, verificare la proprietà di destinazione dell'evento. – connexo

risposta

8

È possibile utilizzare event.stopPropagation() provare questo: -

$('#yes').click(function(e){ 
e.stopPropagation(); 
}); 

Demo

+0

Se abbiamo più righe e una sola casella per ogni riga con lo stesso ID, funziona solo per la prima riga. qualsiasi suggerimento su questo –

+0

per più scenari di selezione, se seleziono le caselle di controllo in base al nome della classe, allora funziona bene –

4

Utilizzare event.stopPropagation per interrompere l'evento, è necessario associare il nuovo evento click per la casella di controllo.

Impedisce all'evento di ribollire nell'albero DOM, impedendo che eventuali gestori di parentesi vengano avvisati dell'evento.

Live Demo

$('#yes').click(function(event){   
     event.stopPropagation(); 
}); 

Un'altra alternativa potrebbe essere withing addizione click gestore per checkbox è saltare trattamento dei tr click conduttore quando origine evento è checkbox.

Live Demo

$('tr').click(function(event){ 
    if(event.target.id === 'yes') return; 
    alert('you clicked the row');   
}); 
+1

non penso che funzionerà. il cambiamento non fermerà la propagazione del click su '# yes'. fiddle https://jsfiddle.net/5wthn3n4/ – Junaid

+0

Grazie a @Junaid, mi sono perso. – Adil

0

Usa event.stopPropagation();

Definizione

Impedisce l'evento dalla zampillante l'albero del DOM, impedendo qualsiasi gestore genitore dalla notifica della manifestazione.

Problemi correlati