Frage

Gibt es eine Möglichkeit, eine Funktion nur, wenn Event.preventDefault () laufen auf einem Ereignis aufgerufen wird (durch eine andere unbekannte Funktion). Dies ist für eine jQuery-Plugin, so habe ich keine Kenntnis von dem, was in anderen Teilen der Seite tun könnten. Ich habe dies versucht:

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

, aber es funktioniert nicht ... nur verhält sich wie normal, ohne Fehler.

Im Gegensatz dazu möchte ich das Gegenteil zu ... eine Funktion aufzurufen, nur wenn Event.preventDefault () wird nicht aufgerufen. In der Tat, eine Funktion für die Standardaktion für ein Ereignis hinzuzufügen. Irgendwelche Ideen? Ist all dies überhaupt möglich?

Edit: Basierend auf dem Kommentar, habe ich eine Lösung für das erste Problem bekommt: http: / /jsfiddle.net/nathan/VAePB/9/ . Es funktioniert in Chrome (Benachrichtigungen function preventDefault() { [native code] }, aber IE Warnungen undefined. So IE wird nicht lassen Sie mich Event.prototype.test definieren, aber es lässt mich neu definieren Event.prototype.preventDefault. Seltsam. Ich bin sicher, ich kann kommen mit eine Lösung für das das zweite Problem auf diesem basiert, wenn ich es an die Arbeit im IE nur erhalten können.

War es hilfreich?

Lösung

Für das erste Problem, versuchen, etwas wie folgt aus:

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

Ich weiß nicht, ob das funktionieren wird, aber es könnte einen Versuch wert sein.

Für das zweite Problem, würde ich so etwas wie Live-Event-Handling versuchen. Bring einen Hörer auf einem Mutterelement (d.h. body oder einen Top-Level-div). Wenn Sie Ihren Haken in preventDefault vor wie erwähnt erhalten können, können Sie das verwenden, um ein Flag zu setzen. Wenn das Ereignis zu diesem Element sprudelt und Ihre Flag nicht gesetzt ist, tun Sie Ihre erweiterten Verhalten. Obwohl dies mit allen Ereignissen nicht funktionieren, da nicht alle Ereignisse Blasen. Eine weitere Möglichkeit, dieses Problem zu lösen, um Verzögerung der Ausführung sein könnte, bis der aktuelle Stapel mit setTimeout(0,...) beendet und dann die Fahne zu überprüfen.

Andere Tipps

Ich bin nicht sicher, habe ich verstehe. Können Sie nicht verwenden event.isDefaultPrevented() wie dieser

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top