web-dev-qa-db-ja.com

リンク上のjQuery / JavaScriptでのクリックのシミュレーション

JavaScriptを使用して、ページ上のリンクのクリックをシミュレートします。そのリンクに「onclick」イベントにバインドされた関数がある場合(他のJSで制御できない場合)、その関数を呼び出す必要があります。そうでない場合、リンクは通常の方法で動作し、新しいページを開きます。

「onclick」ハンドラーの値をチェックするだけで十分かどうかはわかりません。これを構築して、すべてのリンク要素で機能するようにします。

どのJavaScriptライブラリ(必ずしもjQueryである必要はありません)またはJavaScriptを使用して、どの関数がリンクのonclickイベントにバインドされるかを制御することはできません。

編集:以下の回答の助けを借りて、jQueryまたはonclick属性を使用して接続されたイベントハンドラーを確認することができるようです。 addEventListener /他のJSライブラリを使用してアタッチされたイベントハンドラをチェックして、確実に実行できるようにするにはどうすればよいですか?

52
ankit

click 関数を使用して、選択した要素でクリックイベントをトリガーできます。

例:

$( 'selector for your link' ).click ();

JQueryの documentation でさまざまなセレクターについて学ぶことができます。

編集:以下のコメンターが言ったように。これは、インラインまたは「element.onclick」のスタイルでjQueryが添付されたイベントでのみ機能します。 addEventListenerでは機能せず、イベントハンドラが定義されていない場合はリンクをたどりません。これは次のようなもので解決できます。

var linkEl = $( 'link selector' );
if ( linkEl.attr ( 'onclick' ) === undefined ) {
    document.location = linkEl.attr ( 'href' );
} else {
    linkEl.click ();
}

ただし、addEventListenerについては知りません。

47
Jan Hančič

なぜ良いol 'javascriptだけではありませんか?

$('#element')[0].click()

40
frankies

ただ

$("#your_item").trigger("click");

.trigger()を使用すると、パラメーターとして渡すだけで、多くのタイプのイベントをシミュレートできます。

30
tanathos

簡単! jQueryの click 関数を使用するだけです:

$("#theElement").click();
8
Robert Grant

これを試して

function submitRequest(buttonId) {
    if (document.getElementById(buttonId) == null
            || document.getElementById(buttonId) == undefined) {
        return;
    }
    if (document.getElementById(buttonId).dispatchEvent) {
        var e = document.createEvent("MouseEvents");
        e.initEvent("click", true, true);
        document.getElementById(buttonId).dispatchEvent(e);
    } else {
        document.getElementById(buttonId).click();
    }
}

そしてあなたはそれを次のように使うことができます

submitRequest("target-element-id");
7
Yashpal Singla

最初にこれを参照してください question リンクにjQueryハンドラが割り当てられているかどうかを確認する方法を確認します。

次の使用:

$("a").attr("onclick")

javascriptイベントが割り当てられているかどうかを確認します。

上記のいずれかに該当する場合は、クリックメソッドを呼び出します。そうでない場合は、リンクを取得します。

$("a").attr("href")

それに従ってください。

AddEventListenerを使用してイベントハンドラーを追加する場合、どうすればよいかわかりません。完全なページソースを担当している場合は、jQueryイベントハンドラーのみを使用してください。

1
kgiannakakis

これは、Railsリモートフォームボタンを使用してクリックをシミュレートする場合に役立つとは限りません。プロトタイプからニースイベントシミュレーションを移植しようとしました: my snippets 。それと私のために働く。

0
sergeych