2009-09-12 5 views
27

Возможно ли получить текущее значение атрибута onClick тега A через jQuery?получить значение «onclick» с помощью 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(), если это необходимо ?

ответ

44

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

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

Вы можете получить атрибут OnClick. Но не всегда обработчик события клика. –

12

mkoryak правильно.

Но если события привязаны к этому узлу DOM, используя более современные методы (не используя onclick), то этот метод не удастся.

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

Cheers!


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

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

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

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

Cheers снова!

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

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

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

... или использовать RegEx, чтобы лишить function и получить только операторы внутри него.

+0

это здорово! можете ли вы объяснить, как это работает? –

+0

$ ('# google'). Attr ('onclick') содержит значение атрибута 'onclick' (который является строкой). Однако, поскольку браузеры обрабатывают атрибуты события по-другому, они возвращаются с помощью функции onclick() {alert ('hello')} ". Таким образом, если вы хотите напрямую вызвать функцию, вам придется либо разбить 'function() {}', либо сразу вызвать ее. –

0

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

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

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

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

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

, но, как сказал Harshath было бы лучше, если бы вы использовали обработчики событий, как удаление и добавление этой функции в событие 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 устарел. –

Смежные вопросы