Отменить событие наведения курсора мыши (с помощью простого js) на элемент привязки, завернутый в

#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. Я должен был упомянуть, что даже если вы заставите его работать с наведением курсора мыши, обратите внимание, что ссылка все равно будет работать, если пользователь активирует ее с клавиатуры. Событие щелчка, с другой стороны, будет вызвано щелчком мыши или «щелчком» клавиатуры.