Html onmousedown vs href Precedence
Я использую следующий код на одной из моих HTML-страниц. Когда пользователь нажимает на ссылку "Поисковые системы", он открывает yahoo.com на новой странице и Google на текущей странице.
Я проверил это, и он работает (открывает оба URL-адреса), но есть ли шанс, что страница завершит работу window.location (перенаправление на другую страницу) без выполнения команды href?
Есть ли правило для приоритета между двумя командами?
** Примечание: я знаю, что могу решить проблему по-разному, но меня интересует эта конкретная ситуация.
<html>
<head>
<title></title>
<script type="text/javascript">
function clickRedirect() {
window.location = 'http://www.google.com';
}
</script>
<body>
<a onmousedown="clickRedirect()" href="http://www.yahoo.com" target="_blank">Search Engines</a>
</body>
</html>
1 ответ
mousedown
событие произойдет первым, но, как вы можете видеть из факта, что ваш код работает в данный момент, это еще не все.
Вопрос заключается в следующем: после того, как произошел mousedown, и вы установили window.location
, сразу же удаляется страница (и, следовательно, обрабатывается действие по умолчанию клика на a
элемент не происходит), или это действие по умолчанию выполняется до того, как страница будет уничтожена и заменена новой страницей?
Ответ таков: я не думаю, что это гарантированное поведение вообще (в любом случае), и я бы не стал полагаться на него в разных браузерах. Во-первых, что если пользователь удерживает кнопку мыши нажатой? Поскольку действие по умолчанию a
элемент не срабатывает до click
, который требует mouseup
,
Вместо этого я бы, вероятно, хеджировал свои ставки двумя способами:
Во-первых, я бы использовал click
не mousedown
, за это. Пользователи не ожидают, что страницы будут выгружаться, когда они просто удерживают мышь.
Во-вторых, я бы изменил вашу функцию:
function clickRedirect() {
setTimeout(function() {
window.location = "http://www.google.com";
}, 0);
}
Теперь вы специально даете браузеру возможность выполнить действие по умолчанию для клика, прежде чем перейти на другую страницу.
Вы можете найти больше информации по этому вопросу в спецификациях событий DOM:
... в том, что они могут что-то сказать о том, что должно произойти, когда происходит событие и страница уничтожается. Я не сразу ничего не увидел.