3

jQueryで好奇心に出くわし.click()ました。リンクを呼び出すと、clickイベントハンドラーが呼び出されますが、リンクは実際にはたどられません(ブラウザーでクリックされたかのように)。

<a id="link" href="http://www.google.com>Link</a>

$("#link").click() // won't take me to Google

しかし、プレーンなJavascriptでは、すべてが期待どおりに動作します。

document.getElementById("link").click() // *will* take me to Google

これは明らかに意図的な動作clickですが、リンクの特別な例外を除いて、なぜこのように実装されたのかを理解するのに苦労していますか?

ここでフィドル:http://jsfiddle.net/9a6sp/

明確にするために:私はJSでリンクをクリックする方法を尋ねているのではなく、jQueryのデフォルトの動作が、呼び出したときにリンクがクリックされないという事実上の理由です。.click()

4

5 に答える 5

8

domelement.click()リダイレクト用のクロス ブラウザはサポートされていません。リンク内の場所にリダイレクトする必要がある場合は、次を使用できます。

window.location = $('#link').prop('href');
于 2011-11-14T18:56:17.547 に答える
4

jQuery.click()は、クリック ハンドラーを要素にバインドするためのものです。ただし、jQuery を使用してバインドされた click() イベントをトリガーするために使用できます。

jQuery.trigger()は、次のようなバインドされたイベント ハンドラーをトリガーします。$(someElement).trigger("click");

jQuery でリンクをトリガーしたい場合は、次のことをお勧めします。

$(someelement).click(function () {
  window.location = $(link).attr("href");
});
于 2011-11-14T18:56:28.877 に答える
0

これが機能しない理由として、jsFiddle$('#link')ではhtmlのアンカーが選択されず、click()失敗します。タイプセレクターでさえ$('a').href失敗します。

http://jsfiddle.net/yangchenyun/L9EUS/

コードは通常のブラウザで動作します。jQuery('a').eq(1).click()私はstackoverflow.comのコードをクロームコンコールのこのコードでテストしました 。これclick()により、ロゴがトリガーされます。

したがって、結論として、click()リンクはjQuery()で機能します。jsfiddle.netは、通常のjQuery関数に割り込みをかけています。

于 2011-11-14T19:18:08.470 に答える
0

多分これはあなたが探しているものですか?まず、クリック イベントを添付する必要があります。次に、トリガーを使用してそれを起動できます。

<html>
<head title="jQuery Test">
    <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.7.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            $('#blah').click(function () {
                alert('clicked');
            });
            $('#blah').trigger('click');
        });
    </script>
</head>
<body>
    <a id="blah" href="#">BLAH</a>
</body>
</html>
于 2011-11-14T19:11:57.503 に答える
-1

私はjQueryチームに所属していないので、なぜjQueryチームがこのような実装を選択したのかは推測ですが、アンカータグのナビゲーションの側面は、マウスでクリックするだけでなく、他のUI動作によってトリガーされる可能性があります. たとえば、単純な古い JavaScript では、キーボードを使用して要素をアクティブにしても onClick アクションはトリガーされませんが、アンカー タグのナビゲーション アクションはトリガーされます。

つまり、リンクをクリックすることで、参照されているエンドポイントに移動するためのいくつかの可能なメカニズムの 1 つを使用しているだけですが、ナビゲーションとクリックは同じイベントではないため、jQuery はクリックをそれだけで処理することを選択しました。

于 2011-11-14T19:06:01.130 に答える