Wenn der Browser eine Funktion als Ergebnis eines DOM-Ereignis aufruft, übergibt JavaScript ein Objekt in dieser Funktion die enthält Informationen über das Ereignis. Aber es funktioniert ein wenig anders in IE als andere. Um in allen Browsern, foo()
sollte ein Argument * nehmen (ich benutze e
):
function foo(e) {
var sender = (e && e.target) || (window.event && window.event.srcElement);
//sender is the DOM element which was clicked
alert(sender.href); //assumes the clicked element was an <a>
}
Die erste Zeile wird „Sender“ der Wert des Elements zuweisen, die das Ereignis in allen Browsern entstanden.
Nun, wenn Ihr <a>
Elemente Kind enthält (zB ein Bild) und einer von diejenigen war das eigentliche Element geklickt, dann ist das Element wird der „Absender“ werden. Wenn dies eine Möglichkeit ist, müssen Sie den DOM vom Sender gehen, bis Sie Ihren Link zu finden:
function foo(e) {
var sender = (e && e.target) || (window.event && window.event.srcElement);
//sender is the DOM element which was clicked
var myEle = sender;
//find the parent node until we hit the <a>
while(myEle.tagName.toUpperCase() != 'A') {
myEle = myEle.parentNode;
}
//myEle is now the <a>. sender is still the originator.
alert(myEle.href);
}
* können Sie auch Zugriff auf alle Argumente an die Funktion übergeben, auch wenn sie nicht erklärt werden, unter Verwendung von das arguments[]
Array.
ich mag einen Kurzschluss über tirnary manchmal, ich ... var sender = (window.event && window.event.srcElement) || e.Ziel; – Tracker1
@cresentfresh onclick ist semantisch inkorrekt und extrem unflexibel. Siehe progressive Verbesserungstechniken. –