2013-03-26 7 views
6

Dato questo:Perché event.namespace non è definito per l'evento click?

HTML

<button id="btn">Click me</button> 
<br/> 
<div id="result"></div> 

JS

$("#btn").on("click.mynamespace", function (e) { 
    $("#result").text("namespace: " + e.namespace); 
}); 

Perché namespace sempre definito?

EDIT:

Quello che voglio essere in grado di fare è connettere più istanze di un gestore di eventi per l'evento click di un pulsante. Quindi, quando si fa clic sul pulsante, a turno ciascuna istanza viene chiamata. Ogni istanza del gestore eventi deve quindi disconnettersi automaticamente, in modo che se il pulsante viene fatto nuovamente clic, l'istanza del gestore non viene chiamata.

+0

La vera domanda è: perché il listener di eventi viene chiamato se lo spazio dei nomi non corrisponde a mynamespace? –

risposta

8

La proprietà namespace viene definita solo se l'evento è stato attivato utilizzando i metodi .trigger o .triggerHandler di jQuery. Altrimenti, in che modo jQuery dovrebbe sapere quale spazio dei nomi usare se ce ne fossero di più?

http://jsfiddle.net/GYyef/2/

http://api.jquery.com/event.namespace/

Se il vostro obiettivo è quello di avere l'evento accade solo una volta, il metodo .one() sarebbe più appropriato.

+0

oh, speravo che tutti i gestori venissero chiamati per l'evento click, e in ogni gestore sarei in grado di recuperare lo spazio dei nomi per disconnettere il gestore di eventi. – slippyr4

+1

@ slippyr4 i dati dell'evento menzionati da karim79 sarebbero il modo per farlo, tuttavia, se si desidera che l'evento si verifichi una sola volta, il metodo '.one' sarebbe più appropriato. –

+0

post che come risposta, è esattamente quello che volevo! – slippyr4