2010-02-09 17 views
33

Come posso sapere nel mio codice di attivazione che è stato chiamato preventDefault?jQuery: come utilizzare event.preventDefault() con eventi personalizzati?

$(document).trigger('customEvent', params); 
if (/* ??? */) 
    doDefaultActions(); 
+1

se si tratta di un evento personalizzato .. c'è non dovrebbe essere un'azione predefinita .. –

+1

È ancora qualcosa che è possibile utilizzare nel meccanismo degli eventi se il gestore viene utilizzato anche per eventi non personalizzati. –

+0

Se il tuo evento personalizzato è davvero personalizzato, cosa stai cercando di impedire? Normalmente preventDefault è usato in modo che il browser non faccia la sua cosa normale. Il browser stesso non conosce o si preoccupa degli eventi personalizzati. –

risposta

45

trigger() può anche prendere un oggetto evento, quindi se è possibile creare un oggetto evento, in questo modo:

var event = jQuery.Event("customEvent"); 
$(document).trigger(event); 

Quindi è possibile controllare dopo il grilletto per vedere se preventDefault() è stato chiamato in questo modo: gli eventi

var prevented = event.isDefaultPrevented(); 
+0

Wow è bello. Impara qualcosa ogni giorno! – Pointy

+3

Sì, l'ho imparato io stesso osservandolo nell'API jQuery. Quindi tutti noi impariamo oggi! –

+0

Questo non sembra essere documentato (almeno su api.jquery.com) - beh, non riesco a trovarlo lo stesso. I documenti sono un po 'meglio ora, ma vorrei ancora che lo renderebbero un wiki. [modifica: ok ora lo vedo nella fonte !!] – Pointy

0

Per quanto ne so il "preventDefault()" chiamata è su come evitare le risposte browser nativo a cose come i clic sui tag di ancoraggio o di pressione dei tasti nei campi di testo. Una volta che il ciclo di gestione degli eventi è finito, è finita. Per gli eventi inventati, non penso che abbia alcun effetto dal momento che riguarda tutto il sistema di elaborazione degli eventi jQuery e non le funzionalità del browser nativo.

Il tuo codice potrebbe impostare una sorta di bandiera da qualche parte per comunicare con il "mondo esterno".

[modifica] ooh si potrebbe provare a fare in modo che il gestore stash un riferimento all'oggetto evento da qualche parte che il codice esterno possa trovarlo, quindi verificare esternamente con "isDefaultPrevented()". Non so se funzionerebbe comunque.

1

personalizzati non hanno alcune azioni predefinite che accade .. (sono su misura).

D'altra parte, se si vuole fermare l'effetto spumeggiante di questo evento per gli altri poi uno sguardo al triggerHandler che non bolle fino alla gerarchia ..

Problemi correlati