Quando il browser chiama una funzione come il risultato di un evento DOM, JavaScript passa un oggetto a quella funzione che contiene informazioni sull'evento. Ma funziona in modo leggermente diverso in IE rispetto ad altri. Per lavorare in tutti i browser, foo()
dovrebbe prendere un argomento * (io uso 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>
}
La prima linea assegnerà "mittente" il valore dell'elemento, che ha originato l'evento in tutti i browser.
Ora, se il vostro <a>
contiene elementi secondari (ad esempio, un'immagine) e uno di quelli era l'elemento effettivo cliccato, allora questo elemento diventi il "mittente". Se questa è una possibilità, è necessario camminare il DOM dal mittente fino a trovare il tuo 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);
}
* È inoltre possibile accedere a tutti gli argomenti passati alla funzione, anche se non vengono dichiarati, utilizzando l'array arguments[]
.
fonte
2009-05-06 21:53:03
mi piace corto circuito nel corso tirnary a volte, io stesso ... var = mittente (window.event && window.event.srcElement) || e.bersaglio; – Tracker1
@cresentfresh onclick è semanticamente scorretto ed estremamente inflessibile. Vedi tecniche di miglioramento progressivo. –