Domanda

Voglio collegare il mio gestore di eventi chiave ad un ingresso che ha già un altro gestore di eventi collegata al onkeydown. In sostanza, voglio ricevere un evento chiave prima di tutti gli altri gestori e verificare se l'utente preme un determinato tasto - se sì, voglio eseguire alcune funzioni e scartare l'evento, se no, voglio passarlo insieme al altri handler (s).

Come posso fare questo con jQuery?

È stato utile?

Soluzione

Se si sta caricando uno script di terze parti o jQuery addon si può semplicemente caricare lo script o la funzione prima. Se lo fai, allora si può usare qualcosa di simile senza il disordine dei gestori di eventi non impegnativa e rilegatura.

// your possible interceptor code
$("#awesome").keydown(function(e) {
  if (e.keyCode < 70) {
    e.stopImmediatePropagation();
    console.log("BLOCKED!!!");
  };
});

// possible 3rd party event code loaded after your code
$("#awesome").keydown(function(e) {
  console.log("3rd party:"+e.keyCode);
});

Esempio pagina web => http: / /mikegrace.s3.amazonaws.com/forums/stack-overflow/example-key-event-interception.html

Esempio di uscita della console Firebug alt text

jQuery stopImmediatePropagation () documentazione

Altri suggerimenti

In base alla documentazione jQuery bind ():

"Quando un evento raggiunge un elemento, tutti i gestori legati a questo tipo di evento per l'elemento vengono sparati. Se non ci sono più gestori registrati, saranno sempre eseguiti nell'ordine in cui sono stati legati".

Quindi, sembra che si dovrà sciogliere gli altri gestori, legano il vostro e quindi aggiungere gli altri indietro se si desidera il vostro da eseguire prima.

Ci sono alcune informazioni buono in questa discussione rispetto a quella: jQuery: gestori di eventi Unbind per legare di nuovo più tardi

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top