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:

... в том, что они могут что-то сказать о том, что должно произойти, когда происходит событие и страница уничтожается. Я не сразу ничего не увидел.

Другие вопросы по тегам