#javascript #event-handling
#javascript #обработка событий
Вопрос:
У меня есть следующая разметка:
<ul>
<li id="aCont">
<a href="http://test.com">test</a>
</li>
</ul>
<script type="text/javascript">
document.getElementById("aCont").onmousedown= function (e) {
//some Action
}
<script>
Мне не удалось сделать это с e.preventDefault()
и e.stopPropagation()
ни с return false
одним из них. Возможно ли вообще отменить это событие?
Спасибо
Ответ №1:
Предполагая, что ваше намерение состоит в том, чтобы остановить переход по щелчку на элементе привязки к указанному URL, тогда вам нужно использовать событие «onclick», а не «onmousedown».
С помощью олдскульного element.onsomeevent =
обработчика только браузеры, отличные от IE, передают объект события функции в качестве параметра, в то время как IE имеет window.event
свойство — так что вам нужно разрешить и это.
И, опять же, IE делает все по-другому, предотвращая действие по умолчанию, связанное с событиями: для IE установите для returnValue
свойства события значение false, для вызова, отличного от IE e.preventDefault()
(обратите внимание на «t» в конце «предотвратить» — вы неправильно написали это в своем вопросе) и / или возвращайте false из обработчика.
Объединение всего этого:
document.getElementById("aCont").onclick = function(e) {
// allow for IE, which doesn't pass the event object as a parameter
if (!e) e = window.event;
e.returnValue = false;
if (e.preventDefault)
e.preventDefault();
return false;
}
(Примечание: вы также написали e.stopPropagation()
неправильно, но для этой цели вам не нужен этот метод — он останавливает передачу события родительским элементам, он не отменяет действие по умолчанию.)
Комментарии:
1. Плохо то, что мне не разрешено изменять тип события.
2. Ну, вы могли бы скопировать содержимое моей функции и сохранить
onmousedown
событие и посмотреть, что произойдет. По крайней мере, тогда вы будете иметь дело с тем, как разные браузеры отменяют события. Я никогда не пытался отменить навигацию по гиперссылкам из,onmousedown
потому что, конечно,onclick
это правильное место для этого, но, возможно, это сработает — вы получаете событие щелчка только после перемещения мыши вниз и вверх, так что… (И мои извинения: я только что заметил, что я убрал фактическое слово.onclick
из своего кода, поэтому я только сейчас отредактировал его.)3. P.S. Я должен был упомянуть, что даже если вы заставите его работать с наведением курсора мыши, обратите внимание, что ссылка все равно будет работать, если пользователь активирует ее с клавиатуры. Событие щелчка, с другой стороны, будет вызвано щелчком мыши или «щелчком» клавиатуры.