получить значение "onclick" с помощью jQuery? - PullRequest
28 голосов
/ 12 сентября 2009

Можно ли получить текущее значение атрибута onClick тега A через jQuery?

Например, у меня есть:

<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 (), если это необходимо?

Ответы [ 6 ]

44 голосов
/ 12 сентября 2009

Я никогда не делал этого, но это было бы сделано так:

var script = $('#google').attr("onclick")
13 голосов
/ 12 сентября 2009

mkoryak правильно.

Но если события связаны с этим DOM-узлом с использованием более современных методов (не использующих onclick), этот метод завершится неудачей.

Если это то, что вы действительно хотите, проверьте этот вопрос и его принятый ответ.

Ура!


Я снова прочитал ваш вопрос.
Я хотел бы сказать вам следующее: не используйте onclick, onkeypress и лайки для привязки событий.

Использование лучших методов, таких как addEventListener(), позволит вам:

  1. Добавить более одного обработчика события к определенному событию
  2. выборочно удалить некоторых слушателей

Вместо фактического использования addEventListener(), вы можете использовать jQuery обертки типа $('selector').click().

Ура снова!

12 голосов
/ 10 марта 2013

Это работает для меня

 var link_click = $('#google').get(0).attributes.onclick.nodeValue;
 console.log(link_click);
11 голосов
/ 12 сентября 2009
$('#google').attr('onclick') + ""

Однако Firebug показывает, что возвращает функцию «onclick». Позже вы можете вызвать функцию, используя следующий подход:

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

... или используйте RegEx для удаления function и получения только операторов внутри него.

4 голосов
/ 13 сентября 2009

Я не совсем уверен, как это сделать в jQuery ... но это работает:

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

но, как сказал Харшат, было бы лучше, если бы вы использовали прослушиватели событий, поскольку удаление и добавление этой функции обратно в событие onclick может быть проблематичным.

0 голосов
/ 12 сентября 2009

Не могли бы вы объяснить, что именно вы пытаетесь достичь? В общем случае вы НИКОГДА не должны получать атрибут onclick из элементов HTML. Также не следует указывать onclick на самом элементе. Вместо этого установите динамический клик с помощью JQuery.

Но, насколько я понимаю, вы пытаетесь переключаться между двумя различными функциями onclick. Что может быть лучше, так это реализовать функцию onclick таким образом, чтобы она могла справиться с обеими ситуациями.

$("#google").click(function() {
    if (situation) {
        // ...
    } else {
        // ...
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...