web-dev-qa-db-ja.com

jQueryで「onclick」の値を取得しますか?

JQuery経由でAタグのonClick属性の現在の値を取得することは可能ですか?

たとえば、私は持っています:

<a href="http://www.google.com" id="google" onclick="alert('hello')">Click</a>

Onclickコードを取得して、後で使用するために保存できるようにします(onclickイベントをしばらく変更する予定です)。

次のようなことをすることは可能ですか?

var link_click = $("#google").onclick;

または:

var link_click = $("#google").click;

コードの後半でそのコードを再適用できるようにするか、必要に応じてeval()できるようにしますか?

28
Mike Trpcic

私はこれをやったことはありませんが、次のようになります:

var script = $('#google').attr("onclick")
47
mkoryak

mkoryakは正しいです。

ただし、より新しいメソッド(onclickを使用しない)を使用してイベントがそのDOMノードにバインドされている場合、このメソッドは失敗します。

それが本当に必要な場合は、 この質問 とその受け入れられた答えを確認してください。

乾杯!


あなたの質問をもう一度読みました。
これをお伝えしたいのですが、onclickonkeypressなどを使用してイベントをバインドしないでください。

addEventListener()のような優れたメソッドを使用すると、次のことが可能になります。

  1. 特定のイベントに複数のイベントハンドラーを追加する
  2. 一部のリスナーを選択的に削除する

実際にaddEventListener()を使用する代わりに、$('selector').click()のようなjQueryラッパーを使用できます。

乾杯!

13
jrharshath

これは私のために働く

 var link_click = $('#google').get(0).attributes.onclick.nodeValue;
 console.log(link_click);
12
hexdump
$('#google').attr('onclick') + ""

ただし、Firebugは、これが関数 'onclick'を返すことを示しています。次の方法を使用して、後で関数を呼び出すことができます。

(new Function ($('#google').attr('onclick') + ';onclick();'))()

...またはRegExを使用してfunctionを削除し、その中のステートメントのみを取得します。

11
Alex Gyoshev

私はjQueryでこれを行う方法がわかりません...しかし、これは動作します:

var x = document.getElementById('google').attributes;
for (var i in x) {
 if (x[i].name == "onclick") alert(x[i].firstChild.data);
}

ただし、Harshathが言ったように、イベントリスナーを使用した方が良いと思います。この関数を削除してonclickイベントに追加し直すのは面倒かもしれないからです。

4
Mottie

達成しようとしていることを正確に説明してもらえますか?一般に、HTML要素からonclick属性を取得する必要はありません。また、要素自体のonclickを指定しないでください。代わりに、JQueryを使用してonclickを動的に設定します。

しかし、私が理解している限りでは、2つの異なるonclick機能を切り替えようとします。より良いのは、両方の状況を処理できるようにonclick関数を実装することです。

$("#google").click(function() {
    if (situation) {
        // ...
    } else {
        // ...
    }
});
0