Есть ли способ получить доступ к событию JavaScript внутри атрибута onclick? - PullRequest
1 голос
/ 08 августа 2011

Предположим, мне нужно написать обработчик onclick в атрибуте , например:

<a href='#' onclick='DoSomething(); event.stopPropagation(); return false;'>
    ...</a>

Я знаю, что это дурной тон, но предположим, что на данный момент мне нужно использовать атрибут.

К сожалению event не определено. Я попытался e, и это тоже не определено. Есть ли способ получить доступ к объекту события внутри атрибута или любой другой способ остановить распространение события?

Ответы [ 3 ]

3 голосов
/ 08 августа 2011

Где вы получите объект события, зависит от браузера. Некоторые (все?) Версии IE помещают его в window.event, но все остальные передают его в качестве аргумента. Таким образом, вы заканчиваете тем, что делаете глупый маленький танец, подобный этому:

function DoSomething(event) {
    event = event || window.event;
    event.stopPropagation();
    // Do useful work.
    return false;
}

А затем настройте onclick следующим образом:

<a href="javascript:void(0)" onclick="DoSomething(event)">

Я также переключаюсь на javascript:void(0), чтобы у вас не возникало обычных проблем "#, интерпретируемых как фрагмент страницы".

1 голос
/ 08 августа 2011

Полагаю, вам нужно передать его в саму функцию, например:

<a href='#' onclick='DoSomething(event); return false;'>...</a>

function DoSomething(event){
    event.stopPropagation(); 
}
0 голосов
/ 08 августа 2011

В зависимости от браузера, event создание и обработка обрабатываются по-разному.

IE создает объект глобального события, когда происходит щелчок. FF не создает объект global event, но передает его функции в качестве первого аргумента.

Но в вашем случае простое изречение return false отменит действие ссылки (если это то, что вы намереваетесь сделать).

<a href='#' onclick='DoSomething(); return false;'>    ...</a>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...