Domanda

C'è un modo per eseguire una funzione solo se event.preventDefault () viene chiamato su un evento (da un'altra funzione ignota). Questo è per un plugin jQuery, quindi non ho alcuna conoscenza di ciò che altre parti della pagina potrebbe fare. Ho provato questo:

Event.test = Event.preventDefault;
Event.preventDefault = function () {
    alert('Success');
    this.test();
}

ma non funziona ... solo si comporta come normale, senza errori.

Al contrario, voglio il contrario troppo ... per chiamare una funzione solo se event.preventDefault () non viene chiamato. In effetti, per aggiungere una funzione per l'azione predefinita per un evento. Qualche idea? È tutto questo a tutto il possibile?

Modifica: Sulla base del commento, ho una soluzione al primo problema: http: / /jsfiddle.net/nathan/VAePB/9/ . Funziona in Chrome (avvisi function preventDefault() { [native code] }, ma IE avvisi undefined. Così IE non mi permette di definire Event.prototype.test, ma mi permette di ridefinire Event.prototype.preventDefault. Strano. Sono sicuro che posso venire con una soluzione al problema del secondo sulla base di questo se posso solo farlo funzionare in IE.

È stato utile?

Soluzione

Per il primo problema, provare qualcosa di simile:

oldPreventDefault = Event.prototype.preventDefault;
Event.prototype.preventDefault = function() {
    //do stuff
    oldPreventDefault.call(this);
}

Non so se questo lavoro sarà, ma forse vale la pena un colpo.

Per il secondo problema, vorrei provare qualcosa di simile a gestione degli eventi dal vivo. Mettere un ascoltatore in un elemento padre (vale a dire body o un div di livello superiore). Se è possibile ottenere il vostro gancio in preventDefault come detto prima, è possibile utilizzare che per impostare un flag. Se l'evento bolle fino a tale elemento e la vostra bandiera non è impostato, fare il vostro comportamento esteso. Anche se questo non funziona con tutti gli eventi, dal momento che non tutti gli eventi bolla. Un altro modo per affrontare questo problema potrebbe essere quella di esecuzione ritardo fino alla pila corrente ha terminato di utilizzare setTimeout(0,...) e quindi il controllo della bandiera.

Altri suggerimenti

Non sono sicuro di aver capito. Non puoi semplicemente usare event.isDefaultPrevented() come questo

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