用jQuery获取“onclick”的值?

时间:2009-09-12 17:08:37

标签: javascript jquery javascript-events

是否可以通过jQuery获取A标签的onClick属性的当前值?

例如,我有:

<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 个答案:

答案 0 :(得分:44)

我从未这样做过,但会这样做:

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

答案 1 :(得分:13)

mkoryak是正确的。

但是,如果使用更现代的方法(不使用onclick)将事件绑定到该DOM节点,则此方法将失败。

如果这是您真正想要的,请查看this question及其接受的答案。

干杯!


我再次阅读你的问题 我想告诉你:不要使用onclickonkeypress等来绑定事件。

使用addEventListener()等更好的方法可以让您:

  1. 为特定事件添加多个事件处理程序
  2. 有选择地删除一些听众
  3. 您可以使用addEventListener()之类的jQuery包装,而不是实际使用$('selector').click()

    再次干杯!

答案 2 :(得分:12)

这对我有用

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

答案 3 :(得分:11)

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

然而,Firebug显示这会返回一个函数'onclick'。您可以稍后使用以下方法调用该函数:

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

...或使用RegEx剥离function并仅获取其中的语句。

答案 4 :(得分: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事件可能会很麻烦。

答案 5 :(得分:0)

你能解释一下你到底想要完成什么吗?通常,您不必从HTML元素中获取onclick属性。此外,您不应该在元素本身上指定onclick。而是使用JQuery动态设置onclick。

但据我了解,您尝试在两个不同的onclick功能之间切换。更好的方法是以能够处理这两种情况的方式实现你的onclick功能。

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