Gdy przeglądarka wywołuje funkcję jako skutek zdarzenia DOM, JavaScript przekazuje obiekt do tej funkcji, która zawiera informacje o wydarzeniu. Ale działa to trochę inaczej w IE niż inne. Aby działać we wszystkich przeglądarkach, foo()
powinien podjąć argumentu * (używam 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>
}
Pierwsza linia przypisze „Nadawca” wartość elementu, który pochodzi zdarzenie we wszystkich przeglądarkach.
Teraz, jeśli <a>
zawiera elementów podrzędnych (na przykład obraz) i jeden z tych była rzeczywista elementu kliknął, to staną się elementem „nadawca”. Jeśli jest to możliwe, trzeba chodzić DOM od nadawcy aż znajdziesz swój link:
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);
}
* Można także uzyskać dostęp do argumentów przekazywanych do funkcji, nawet jeśli nie zostały one uznane, za pomocą tablica arguments[]
.
lubię zwarcie nad tirnary czasami sobie ... var nadawcy = (window.event && window.event.srcElement) || mi.cel; – Tracker1
@cresentfresh onclick jest semantycznie niepoprawny i niezwykle nieelastyczny. Zobacz techniki progresywnego ulepszania. –