2

私は自分のhtmlページの1つで次のコードを使用しています。ユーザーが[検索エンジン]リンクをクリックすると、新しいページでyahoo.comが開き、現在のページでGoogleが開きます。

私はこれをテストしましたが、動作します(両方のURLを開きます)が、 hrefコマンドを完了せずにページがwindow.locationを完了する(別のページにリダイレクトする)可能性はありますか?

2つのコマンドの間に優先順位のルールはありますか?

**注:さまざまな方法で問題を解決できることはわかっていますが、この特定の状況に興味があります。

<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>
4

1 に答える 1

4

イベントが最初mousedownに発生しますが、コードが現在機能しているという事実からわかるように、それだけではありません。

問題は、マウスダウンが発生して設定するwindow.locationと、ページがすぐに消えてしまうのか(したがって、a要素をクリックするデフォルトのアクションの処理が行われないのか)、またはそのデフォルトのアクションが前に完了するのかということです。ページが破棄され、新しいページに置き換えられますか?

答えは次のとおりです。私はそれが(どちらの方法でも)保証された動作だとは思いませんし、クロスブラウザに依存することもありません。まず、ユーザーがマウスボタンを押したままにした場合はどうなりますか?要素のデフォルトのアクションは、が必要になるaまでトリガーされないためです。clickmouseup

代わりに、私はおそらく2つの方法で自分の賭けをヘッジします。

まず、これにはclickではなくmousedownを使用します。ユーザーは、マウスを押したままのときにページがスワップアウトすることを期待していません。

次に、関数を変更します。

function clickRedirect() {
    setTimeout(function() {
        window.location = "http://www.google.com";
    }, 0);
}

これで、別のページに移動する前に、クリックのデフォルトのアクションを完了する機会をブラウザに具体的に与えることができます。

これについての詳細は、DOMイベントの仕様の奥深くにあるかもしれません。

...イベントが進行中でページが破棄されているときに何が起こるべきかについて彼らが何かを言うかもしれないという点で。すぐには何も見えませんでした。

于 2012-12-02T10:35:13.437 に答える