JQuery.trigger( 'click');を取得する方法 マウスクリックを開始する


145

JQueryを使用してマウスクリックをシミュレートする方法を理解するのに苦労しています。誰かが私が間違っていることについて教えてください。

HTML:

<a id="bar" href="http://stackoverflow.com" target="_blank">Don't click me!</a>
<span id="foo">Click me!</span>

jQuery:

jQuery('#foo').on('click', function(){
    jQuery('#bar').trigger('click');
});

デモ:FIDDLE

#fooのボタンをクリックしたときに#barのクリックをシミュレートしたいのですが、これを試しても何も起こりません。私も試したjQuery(document).ready(function(){...})が成功しなかった。


2
jQuery trigger「jQuery click」イベントが追加された場合にのみ機能します。そうしないと、この方法では何もできなくなります。
Reza Mamun 2014年

3
これはブラウザに組み込まれたセキュリティ対策です。:Blazemongerの答え@を参照してくださいstackoverflow.com/questions/7999806/...
サンチェス

1
@ san.chez興味深いことに、情報をありがとう、このセキュリティ対策については以前は知りませんでした。
lickmycode 2014年

回答:


277

jQueryメソッドを使用する代わりjQuery('#bar')[0].click(); に、実際のDOM要素(jQueryオブジェクトではない)でのマウスクリックをシミュレートするために使用する必要があります.trigger()

注:DOMレベル2 .click()、Safariの一部の要素では機能しません。回避策を使用する必要があります。

http://api.jquery.com/click/


18
あなたは私の日を保存しました$( '#asd')[0] .click();
waza123 2016年

これを使用して、jQuery ACFフィールドの次のタブをクリックします:$( '。next')。click(function(){$( '#primary li.active')。next()。find( '。acf-tab-button ')[0] .click();});
Tisch、2016

1
ありがとう。デスクトップで動作します。ただし、モバイル(android chrome)ではサポートされていません。助言がありますか?
kk-dev11 16

何らかの理由で、これにより現在のURLのハッシュが破壊されます。
luis 2016

1
<aタグのhrefの1つが '#'である場合は、それを行います。<aは通常、別のURLにリダイレクトします。クリックハンドラーが戻る前に、ev.preventDefault()およびev.stopPropagation()で停止する必要があります。または、<a;以外のタグを使用します。表示されているものすべてにクリックハンドラーをアタッチできます。
OsamaBinLogin 2017年

43

次の.click() ようにする前に、小さなタイムアウトイベントを置く必要があります。

setTimeout(function(){ $('#btn').click()}, 100);

ページが読み込まれたときにクリックをシミュレートしようとする場合に最適です。
Gabriel Dzul

33

これはJQueryの動作です。なぜこのように機能するのかわかりません。リンクでonClick関数をトリガーするだけです。

試してください:

jQuery(document).ready(function() {
    jQuery('#foo').on('click', function() {
        jQuery('#bar')[0].click();
    });
});

説明ありがとうございます。jQueryの非常に苛立たしい動作ですが、コードは機能します。
lickmycode 2014年

全くイライラしない。trigger()クリックイベントのJavaScript部分を実行するためのものです。これは、function var() {}複数回再利用されるthats を作成することと非常によく似ています。

21

私のデモを参照してください:http : //jsfiddle.net/8AVau/1/

jQuery(document).ready(function(){
    jQuery('#foo').on('click', function(){
         jQuery('#bar').simulateClick('click');
    });
});

jQuery.fn.simulateClick = function() {
    return this.each(function() {
        if('createEvent' in document) {
            var doc = this.ownerDocument,
                evt = doc.createEvent('MouseEvents');
            evt.initMouseEvent('click', true, true, doc.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
            this.dispatchEvent(evt);
        } else {
            this.click(); // IE Boss!
        }
    });
}

私はそのthis.click();中にラップしますelse if(this.click)
アレックスW

15

役に立つかもしれません:

トリガーを呼び出すコードは、イベントが呼び出された後に実行する必要があります。

たとえば、#expense_ticketsの値が変更されたとき、およびページがリロードされたときに実行するコードがいくつかあります

$(function() { 

  $("#expense_tickets").change(function() {
    // code that I want to be executed when #expense_tickets value is changed, and also, when page is reload
  });

  // now we trigger the change event
  $("#expense_tickets").trigger("change");

})

4
ああ、それも私の問題でした!が機能しない理由について困惑しtrigger()ました。トリガーコードを、呼び出していた関数の上に設定したことがわかりました。フックは実際には配置されていませんでした。どー!
Andrew Newby 2016

5

jQuery .trigger('click');は、このイベントでイベントをトリガーするだけで、デフォルトのブラウザーアクションもトリガーしません。

次のJavaScriptで同じ機能をシミュレートできます。

jQuery('#foo').on('click', function(){
    var bar = jQuery('#bar');
    var href = bar.attr('href');
    if(bar.attr("target") === "_blank")
    {
        window.open(href);
    }else{
        window.location = href;
    }
});


0

私は上位2つの回答を試しましたが、ファイル入力要素から「display:none」を削除するまで機能しません。次に、.trigger()に戻しました。これは、Windowsのサファリでも機能しました。

つまり、display:noneを使用しないください。ファイル入力を非表示にするには、代わりにopacity:0を使用できます。


0

技術的にはこれに対する答えではありませんが、受け入れられた答え(https://stackoverflow.com/a/20928975/82028)を適切に使用して、jQuery ACFフィールドのタブの[次へ]ボタンと[前へ]ボタンを作成します。

$('.next').click(function () {
    $('#primary li.active').next().find('.acf-tab-button')[0].click();
});

$('.prev').click(function () {
    $('#primary li.active').prev().find('.acf-tab-button')[0].click();
});


-3

JavaScriptでクリックイベントをシミュレートすることはできません。jQuery .trigger()関数は、要素に対して「クリック」という名前のイベントのみを発生させます。これは、.on()jQueryメソッドでキャプチャできます。


9
「JavaScriptではクリックイベントをシミュレートできません」 - はい、できます。
nnnnnn 2014年

間違っています... javascript / jqueryでクリックイベントをシミュレートでき、.clickをオンにせずにトリガークリックイベントをキャプチャできます。
15年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.