2009-09-12 10 views
27

Ist es möglich, den aktuellen Wert des onClick-Attributs eines A-Tags über jQuery zu erhalten?Erhalte den Wert von "onclick" mit jQuery?

Zum Beispiel habe ich:

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

ich den Onclick Code zu bekommen, damit ich es speichert für eine spätere Verwendung (wie ich das Onclick-Ereignis für eine kleine Weile zu ändern würde).

Ist es möglich, so etwas wie zu tun:

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

oder:

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

Damit später in meinem Code kann ich es, dass Code oder eval() bei Bedarf erneut anwenden ?

Antwort

44

Ich habe dies nie getan, aber es würde wie folgt geschehen:

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

Sie können die Onclick-Attribut erhalten. Aber nicht immer der Click-Event-Handler. –

12

mkoryak ist richtig.

Wenn jedoch Ereignisse mit moderneren Methoden an den DOM-Knoten gebunden sind (ohne onclick zu verwenden), schlägt diese Methode fehl.

Wenn das ist, was Sie wirklich wollen, überprüfen Sie this question, und seine angenommene Antwort.

Prost!


Ich las Ihre Frage erneut.
Ich möchte Ihnen das sagen: Verwenden Sie nicht onclick, onkeypress und dergleichen Ereignisse zu binden.

Mit besseren Methoden wie addEventListener() werden Sie aktivieren:

  1. Fügen Sie mehr als ein Event-Handler auf ein bestimmtes Ereignis
  2. selektiv

Statt tatsächlich mit addEventListener() einige Zuhörer entfernen, Sie könnte jQuery Wrapper wie $('selector').click() verwenden.

Prost wieder!

11

Allerdings zeigt Firebug, dass dies eine Funktion 'onclick' zurückgibt. Sie können später die Funktion aufrufen, die folgende Ansatz zur Verwendung von:

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

... oder ein RegEx verwenden, um die function abzustreifen und nur die Anweisungen innerhalb es.

+0

das ist großartig! Kannst du erklären, wie es funktioniert? –

+0

$ ('# google'). Attr ('onclick') enthält den Wert des 'onclick'-Attributs (welches eine Zeichenkette ist). Da die Browser die Ereignisattribute jedoch anders behandeln, werden sie mit "function onclick() {alert ('hallo')}} zurückgegeben." Wenn Sie also die Funktion direkt aufrufen wollen, müssen Sie die 'function() {}' strippen oder sofort aufrufen. –

0

Können Sie erklären, was genau Sie zu erreichen versuchen? Im Allgemeinen müssen Sie das onclick-Attribut NIEMALS aus HTML-Elementen beziehen. Auch sollten Sie nicht den Onclick auf das Element selbst angeben. Setzen Sie den Onclick stattdessen dynamisch mit JQuery.

Aber soweit ich Sie verstehe, versuchen Sie, zwischen zwei verschiedenen Onclick-Funktionen zu wechseln. Es könnte besser sein, Ihre onclick-Funktion so zu implementieren, dass sie beide Situationen bewältigen kann.

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

Ich bin nicht ganz sicher, wie dies in jQuery zu tun ... aber das funktioniert:

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

aber wie Harshath sagte, es wäre besser, wenn Sie Ereignis-Listener verwendet, wie das Entfernen und Das Hinzufügen dieser Funktion in das onclick-Ereignis kann mühsam sein. Diese

12

funktioniert für mich

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

Dies ist die Antwort, wenn Sie tatsächlich auf den Text des onclick-Attributs und nicht auf die gebundenen Funktionen oder Ereignisse selbst zugreifen müssen. Sie sollten jedoch .get (0) .attributes.onclick.nodeValue durch .get (0) .attributes.onclick.value ersetzen, da nodeValue veraltet ist. –

Verwandte Themen