Когда браузер вызывает функцию в результате события DOM, JavaScript передает объект этой функции, который содержит информацию о событии. Но это работает немного по-другому в IE, чем другие. Для работы во всех браузерах foo()
должен принимать аргумент * (я использую 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>
}
В первой строке будет присвоено «sender» значение элемента, который инициировал событие во всех браузерах.
Теперь, если ваш <a>
содержит дочерних элементов (например, изображение) и один из этих был фактическим нажатием элемента, тогда этот элемент станет "отправителем" ». Если это возможно, вам нужно пройти DOM от отправителя, пока не найдете свою ссылку:
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);
}
* Вы также можете получить доступ к любым аргументам, переданным функции, даже если они не объявлены, используя массив arguments[]
.