2013-04-11 11 views
15

sto cercando di capire come creare correttamente e gli eventi di incendio in JavaScript, così nel processo di apprendimento corse in questa pagina:Qual è un buon esempio di utilizzo dei costruttori di eventi in js?

https://developer.mozilla.org/en-US/docs/DOM/document.createEvent

Quale in cima mi informa di quanto segue:

Il metodo createEvent è obsoleto. Utilizzare invece costruttori di eventi.

Googling I costruttori di eventi JS non sono stati molto fruttuosi - argomenti che parlano di costruttori in generale, ma non di ciò che sto cercando. Qualcuno potrebbe spiegarmi quali sono i costruttori degli eventi e fornire un buon esempio del loro utilizzo?

+0

solo una nota. A volte il modo deprecato nel browser * one * è ancora il più ampiamente supportato su tutti i browser disponibili. – gcb

risposta

9

Da https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent:

Sembra che gli eventi sono ora incapsulati in una classe denominata CustomEvent. Puoi pensare al vecchio document.createEvent come metodo factory che restituisce un oggetto evento. Ora, invece di usare document.createEvent per creare l'oggetto, ora hai accesso per creare direttamente l'oggetto.

//this is the new way 
    var my_event = new CustomEvent('NewEventName'); 
    var my_element = document.getElementById('TargetElement'); 
    my_element.dispatchEvent(my_event); 

è la sostituzione per

//this is the old way 
    var my_event = document.createEvent('NewEventName'); 
    var my_element = document.getElementById('TargetElement'); 
    my_element.dispatchEvent(my_event); 
1

Si desidera utilizzare addEventListener()

https://developer.mozilla.org/en-US/docs/DOM/EventTarget.addEventListener

Ecco il mio codice della libreria per il collegamento di eventi, ho trovato questi su StackOverflow e metterli dentro la mia app namespace globale:

var app={} 

app.listenEvent=function(eventTarget, eventType, eventHandler) { 
    if (eventTarget.addEventListener) { 
     eventTarget.addEventListener(eventType, eventHandler,false); 
    } 
    else if (eventTarget.attachEvent) { 
     eventType = "on" + eventType; 
     eventTarget.attachEvent(eventType, eventHandler); 
    } 
    else { 
    eventTarget["on" + eventType] = eventHandler; 
    } 
} 


app.cancelEvent=function(event) { 
    if (event.preventDefault) 
     event.preventDefault() 
    else 
     event.returnValue = false; 
} 


app.cancelPropagation=function(event) { 
    if (event.stopPropagation) { 
     event.stopPropagation(); 
    } else { 
    event.cancelBubble = true; } 
} 

Quindi, per aggiungere un ascolto per un evento:

app.listenEvent(document.aform.afield, 'focus', function(){console.log(arguments)}) 

Queste funzioni sono eccezionali, funzionano su tutti i browser.

+4

La tua risposta manca il punto. OP ha chiesto informazioni su come creare eventi a livello di codice, non collegando i listener di eventi. – timkg

+0

Un'osservazione piuttosto critica. Ho mostrato come creare un evento che chiama console.log() quando un particolare modulo riceve lo stato attivo. Cosa pensi che l'OP sta chiedendo? onfocus è un evento, onkeydown è un evento, non puoi creare il tuo evento come onPowerOff. –

+2

Scusa se ti ho offeso. OP vuole licenziare i propri eventi a livello di programmazione. È possibile creare (= generare nuovi) eventi che normalmente si verificano solo attraverso l'interazione dell'utente. Posso creare un evento "clic" su un elemento, proprio come se un utente avesse fatto clic sull'elemento. Questo è ciò che l'OP sta chiedendo. EDIT Lei ha detto "ho mostrato come creare un evento che chiama console.log() quando una particolare forma viene attivato." -> No, hai mostrato come ** collegare un gestore di eventi **, non come ** creare ** un evento. – timkg

Problemi correlati