it-swarm.com.ru

получить значение "onclick" с помощью jQuery?

Можно ли получить текущее значение атрибута 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 (), если это необходимо?

28
Mike Trpcic

я никогда не делал этого, но это будет сделано так:

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

mkoryak правильный.

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

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

Ура!


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

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

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

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

Ура снова!

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);
}

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

4
Mottie

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

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

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