href要素でクリックイベントをトリガーする方法


80

以下のように、jQueryを使用してハイパーリンクでクリックイベントをトリガーしようとしています。ハイパーリンクにはIDはありませんが、cssclassはあります

 $(document).ready(function () {  $('.cssbuttongo').trigger('click'); }); 

上記の機能が動作していません。これはハイパーリンクです

<a href="hyperlinkurl" class="cssbuttongo">hyperlink anchor</a>

1
クラスはDOM内のいくつかの要素に適用できるため、それらをクリックするのは良い考えではないようです。
Igor Parra

1
NomikOSあなたはそれについて非常に正しいですが、他の要素がこのcssクラスを使用しているかどうかを確認しました:)
MonsterMMORPG 2011年

回答:


78

私はこれを証明する事実上の証拠を持っていませんが、私はすでにこの問題に遭遇しました。<a>タグでclick()イベントをトリガーすると、入力ボタンなどで期待するのと同じように動作しないようです。

私が採用した回避策は、ウィンドウにlocation.hrefプロパティを設定することでした。これにより、ブラウザーは次のようにリクエストリソースをロードします。

$(document).ready(function()
{
      var href = $('.cssbuttongo').attr('href');
      window.location.href = href; //causes the browser to refresh and load the requested url
   });
});

編集:

私はjsフィドルを作成しますが、jsfiddleがiframeを使用してコードをレンダリングする方法と混合された質問の性質はそれを失敗させます。


これが正解です。ありがとう:)私はまた、hrefをクリックしても機能しないことに気づきました。
MonsterMMORPG 2011年

@MonsterMMorpgこれは、ブラウザが直接のユーザーアクションであると信じる結果にはならないことに注意してください。したがって、賢明に使用してください= D
Matthew Cox

var href = $( '。cssbuttongo')。attr( 'href');であるべきではありません。
Luci 2013

7
これは、リンクにもonclickイベントがある可能性を無視します。ただ、やる$('.cssbuttongo')[0].click()適切にその全体がクリックをシミュレートします。
ローマンスターコフ2014

実際には、完全なhrefでのみ機能します。ここにコードを入れることができなかったので、この投稿に対する私の答えを読んでください。
アラン・ドン

210

ネイティブDOMメソッドは正しいことをします:

$('.cssbuttongo')[0].click();
                  ^
              Important!

これhrefは、がURL、フラグメント(例#blah)、さらにはjavascript:

これは、clickjQueryclickメソッドの代わりにDOMメソッドを呼び出すことに注意してください(これは非常に不完全で、完全に無視されますhref)。


2
@Timwi、私は最初のもの$('.cssbuttongo').click(); // ignores href!が動作することを保証しないと言うつもりでした。後者は常に機能します。インデックス[0]を使用すると、jQueryオブジェクトが通常のJSオブジェクトになります。これは、ブラウザーが使用するものとまったく同じです。@Wei劉
アラン・ドン

1
驚くばかり!非常に直接的で説明的な答え。
caiosm1005 2014

11
これが選択された答えであるはずです。完璧に動作しました!
アミットG

3
@AdilMalik click()メソッドを持つのはjqueryだけではないため、これは機能します。このコードは、jquery以外のclick()メソッドを呼び出します。これはネイティブのDOMです。
ローマンスターコフ2015

1
@Timwiここでjsfiddleを提供します:jsfiddle.net/NabiKAZ/3gv90od5
Nabi KAZ

31

romkynsのすばらしい答えに加えて..ここにいくつかの関連するドキュメント/例があります。


DOM要素にはネイティブ.click()メソッドがあります。

ザ・ HTMLElement.click()メソッドは、要素に対するマウスクリックをシミュレートします。

クリックを使用すると、要素のクリックイベントも発生し、ドキュメントツリー(またはイベントチェーン)の上位の要素にバブルアップして、クリックイベントも発生します。ただし、クリックイベントをバブリングし<a>ても、実際のマウスクリックが受信されたかのように要素がナビゲーションを開始することはありません。 (mdnリファレンス)

関連するW3ドキュメント


いくつかの例..

  • jQueryオブジェクトから特定のDOM要素にアクセスできます:(例)

      $('a')[0].click();
    
  • この.get()メソッドを使用して、jQueryオブジェクトからDOM要素を取得できます:(例)

      $('a').get(0).click();
    
  • 予想どおり、DOM要素を選択して.click()メソッドを呼び出すことができます。(例)

      document.querySelector('a').click();
    

ネイティブイベントをトリガーするためにjQueryは必要ないことを指摘する価値があり.click()ます。


4

JavaScriptを介してクリックをトリガーしても、ハイパーリンクは開きません。これは、ブラウザに組み込まれているセキュリティ対策です。

ただし、いくつかの回避策については、この質問を参照してください。


1
私はそうは思いません..理由はこのように動作する
Cody

3
@CodyDmdは、ユーザーがトリガーするクリックイベントです。OPの元の質問と同じではありません。
Blazemonger 2014年

@CodyDmdそれは[0]あなたのフィドルで重要なようです
Wei Liu

3
それは正確にどのような脆弱性を防ぎますか?
ローマンスターコフ2014

3
Firefox、Chrome、IE11には、ダウンロードやSEOクリック詐欺に対するそのような保護がないため、Blazemonger、あなたが何を意味するのかわかりません。言い換えれば、あなたの答えの最初と2番目の文は両方とも間違っています
ローマンスターコフ2014年

3

皆さんに知らせたいだけですが、受け入れられた答えが常に機能するとは限りません。

これは失敗する例です。

もし <href='/list'>

href = $('css_selector').attr('href')
"/list"
href = document.querySelector('css_selector').href
"http://localhost/list"

または、jQueryから取得したhrefをこれに追加できます

href = document.URL +$('css_selector').attr('href');

またはjQueryの方法

href = $('css_selector').prop('href')

最後に、それを呼び出して、ブラウザの現在のページのURLを変更します

window.location.href = href

またはを使用してポップアウト window.open(url)

ここでは「JSFiddleの例です。


つまり、これをに変更すると機能しないということです$('css_selector')[0].click()か?それはで動作します。このJsFiddle ...
ローマStarkov

記録のために、反対票を投じたのは私ではありませんでした。ここに何かあるかもしれないと思いますが、まだわかりません。
ローマンスターコフ2014年

@romkyns、もちろん、[0]を使用してjQuery要素から抽出した後に機能します(純粋なJSになります)。これ$('.cssbuttongo').click();は、のURLではなくhrefの値のみを提供するため、機能しないという意味です。ブラウザが使用します。誤解を招くコメントについては申し訳ありません。
アラン・ドン

2
@LinDong:それがうまくいくことを知っ[0].click()いるなら、なぜあなたの答えはそれについて言及しないのですか?
Timwi 2014年

location.href相対パスを受け入れるため、を使用/listすると、現在のドメインが自動的に追加されます。だからそれは機能します。
ティム

-1

リンクの代わりにボタンをクリックする方法についても同様の問題に直面していました。メソッド.trigger( 'click')または[0] .click()では成功せず、その理由もわかりませんでした。ついに、以下が私のために働いていました:

$('#elementid').mousedown();
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.