2011-11-14 13 views
3

私はjQueryので好奇心に出くわした:私は、リンク上で.click()を呼び出す場合clickイベントハンドラが呼び出されますが、(それがブラウザでクリックされたかのように)リンクは、実際に従わない:jQueryでリンク()をクリックできないのはなぜですか?

<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 

これは明らかにintentional behaviourある - しかしclickは、このように実装された理由を私は仕事に苦労しています - リンクのための特別な例外を除いて?ここ

フィドル:私はJSのリンクをクリックする方法を求めていないんだけど、むしろ、なぜjQueryのではデフォルトの動作では、あなたが.click()を呼び出すときをクリックされていない効果的を結ぶことである:http://jsfiddle.net/9a6sp/

を明確にします

+2

ネイティブ '.click()'はIEのみです。 – SLaks

+0

@Smamatti: '.click()'はその略語です。 – SLaks

+0

いいえ、どちらも動作しません - しかし、私は実際にこの作業を行う方法を理解しようとはしていませんが、なぜこれがうまくいかないのですか? –

答えて

7

domelement.click()はリダイレクトのクロスブラウザには対応していません。あなたが使用することができ、リンク内の場所にリダイレクトする必要がある場合:

window.location = $('#link').prop('href'); 
+2

実際、Chromeのネイティブアンカー要素には' click() 'メソッドが存在しないため、何もサポートされていません。 – millimoose

4

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

jQuery.trigger()は、このような$(someElement).trigger("click");

としてバインドされたイベント・ハンドラをトリガします私は次のことを示唆しています。

$(someelement).click(function() { 
    window.location = $(link).attr("href"); 
}); 
+0

引数のない ".click()"は、 ".trigger( 'click')"を呼び出すのとまったく同じです。 – Pointy

+0

@Pointy。私は2番目の文でそれを言いませんでしたか? –

+0

申し訳ありませんが、私はそれを明確にしようとしていましたが、明らかに失敗しました:-) – Pointy

-1

私は jQueryのチームは、私はjQueryのチームにいないよ以来、物事をこのように実装することを選んだ理由だけへと推測しているが、アンカータグのナビゲーション態様は他によってトリガすることができますマウスをクリックするだけのUI動作。たとえば、普通の古いjavascriptでは、キーボードを使用して要素をアクティブにしてもonClickアクションはトリガーされませんが、がアンカータグのナビゲーションアクションをトリガーします。

言い換えれば、参照先のエンドポイントにナビゲートするためのいくつかのメカニズムのうちの1つを使用しているリンクをクリックするだけですが、ナビゲーションとクリックは同じイベントではないため、jQueryはクリックそれだけ。

0

おそらくこれはあなたが探しているものですか? まず、クリックイベントを添付する必要があります。 トリガーを使って発射することができます。 jsFiddle $('#link')

これが動作していない理由については
<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> 
0

は、HTMLでアンカーを選択していない、とclick()は失敗します。タイプセレクタ$('a').hrefでも失敗します。

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

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

したがって結論として、のclick()リンクはjQuery()で機能します。 jsfiddle.netは通常のjQuery関数を中断します。

関連する問題