2009-09-12 136 views
27

是否有可能通过jQuery获取A标签的onClick属性的当前值?用jQuery获取“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()函数它?

回答

44

我从来没有做过这个,但它这样做:

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

你可以得到onclick属性。但并不总是点击事件处理程序。 – 2017-07-27 11:49:09

12

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

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

干杯!


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

使用像addEventListener()更好的方法,使您能够:

  1. 添加多个事件处理程序,以一个特定的事件
  2. 删除一些听众选择性

而是实际使用addEventListener(),你可以使用jQuery包装,如$('selector').click()

再次欢呼!

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

但是,Firebug显示这返回一个函数'onclick'。您可以调用该函数将在后面使用以下方法:

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

...或使用正则表达式来剥离function并只获得其中的语句。

+0

这太棒了!你能解释它是如何工作的吗? – 2011-12-07 13:42:23

+0

$('#google')。attr('onclick')保存'onclick'属性(它是一个字符串)的值。但是,因为浏览器以不同的方式处理事件属性,所以它们以“function onclick(){alert('hello')}”返回。因此,如果你想直接调用函数,你必须去掉'function(){}'或者立即调用它。 – 2011-12-19 08:19:33

0

你能解释一下你准备完成什么吗?一般来说,你永远不必从HTML元素获得onclick属性。你也不应该指定元素本身的onclick。相反,使用JQuery动态设置onclick。

但据我了解,您尝试在两种不同的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.value替换.get(0).attributes.onclick.nodeValue,因为不推荐使用nodeValue。 – 2014-11-03 20:28:31