I have a simple table:e.stopPropagation() non funziona come previsto?
Il TR ha <tr onclick='alert("row");'>
e il pulsante è:
$("body").on('click',".b",function (e){
alert('button');
e.stopPropagation();
});
Tuttavia - Anche se ho scritto e.stopPropagation();
avverte ancora: "fila, pulsante".
Ora, so che il gestore di eventi è attaccato al body
e il selettore viene controllato contro di essa (l'inizio click sul tasto e spostare fino al corpo, proprio come $.live
uso da fare, ma contro document
...).
Ma il controllo dovrebbe essere per il button
clic e non per il clic TR
.
Sembra che, mentre sto facendo clic, si propaga alla "body"
(perché ho attaccato gestore di eventi ad esso) e mentre la sua strada fino al corpo attiva il click sul TR
.
Cosa sta succedendo qui? Come posso mantenere il mio codice (allegare al corpo) e avere ancora solo l'avviso del "pulsante".
P.s
so che posso fare semplicemente:
$(".b").on('click',function (e){
alert('button');
e.stopPropagation();
});
ma voglio sapere perché il mio lavoro attuale codice pretende molto (!).
Come ti sembra di capire che il problema è che si allega il gestore di eventi per il corpo, non è chiaro che cosa' chiedendo. –
@dystroy Ho collegato il gestore al corpo. sì. ma ho anche detto: "interrompere la propagazione". quindi IMHO dovrebbe solo allertare "riga". e da lì - smetti di salire. La delega –
utilizza la propagazione dell'evento per raggiungere il delegato. Ecco perché un evento che non bolle (propagare) come evento onload non può essere utilizzato con delega. –