2009-09-12 5 views
27

AタグのonClick属性の現在の値をjQuery経由で取得できますか?jQueryで "onclick"の値を取得しますか?

は例えば、私が持っている:

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

は、私は(私はしばらくの間、onclickイベントを変更することがありますように)ので、私は後で使用するために保存することができonclickのコードを取得したいです。

それはのような何かを行うことは可能です。必要であれば、それは)私のコードではだから後で

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

私は再適用することができるコード、やeval(:

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

かを?

答えて

44

私はこれをやったことがないが、それは次のように行われることになります。

var script = $('#google').attr("onclick") 
+1

のためにあなたはonclickの属性を取得することができます動作します。しかし、必ずしもクリックイベントハンドラとは限りません。 –

12

mkoryakは正しいです。

しかし、最近の方法(onclickを使用しない)を使用してイベントがそのDOMノードにバインドされている場合、このメソッドは失敗します。

これが本当に必要な場合は、this questionとそれに対応する回答を確認してください。

乾杯!


もう一度ご質問をお読みください。
私はあなたにこれを伝えたいと思います:onclickonkeypressなどのイベントをバインドしないでください。 addEventListener()のような、より良い方法を使用して

ができるようになります:

  1. 、選択

代わりに、実際にaddEventListener()を使用してのあなたのいくつかのリスナーを削除し、特定のイベントに

  • を複数のイベントハンドラを追加します。 $('selector').click()のようなjQueryラッパーを使用できます。

    もう一度乾杯!

  • 11
    $('#google').attr('onclick') + "" 
    

    しかし、Firebugは、これが関数 'onclick'を返すことを示しています。

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

    を...またはfunctionを除去し、その中の唯一のステートメントを取得するために正規表現を使用して:あなたは、次のアプローチを使用して、後で関数を呼び出すことができます。

    +0

    これは素晴らしいです!どのように動作するのか説明できますか? –

    +0

    $( '#google')。attr( 'onclick')はonclick'属性(文字列)の値を保持します。ただし、ブラウザはイベント属性を別の方法で処理するため、関数onclick(){alert( 'hello'}} 'が返されます。したがって、関数を直接呼び出す場合は、 'function(){}'を削除するか、直ちに呼び出す必要があります。 –

    0

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

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

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

    私はjQueryのでこれを行う方法はかなりわからない...しかし、これは動作します:Harshathはあなたが削除として、イベントリスナーを使用した場合、それは良いだろうと述べたように

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

    が、この関数をonclickイベントに追加するのは面倒かもしれません。

    12

    これは私

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

    これは、実際にはonclick属性のテキストにアクセスする必要があり、バインドされた関数やイベント自体にアクセスする必要がない場合に対処するための答えです。しかし、.get(0).attributes.onclick.nodeValueを.get(0).attributes.onclick.valueに置き換えるのは、nodeValueが非推奨になっているからです。 –

    関連する問題