使用JQuery获取onclick()事件的字符串值

时间:2011-03-24 16:03:31

标签: javascript jquery

想知道是否有好的方法可以做到这一点,我想我会发布到SO社区......

有一个第三方网页,我无法控制它的呈现方式,但它们允许我添加JQuery。

使用JQuery,我在页面的侧面创建一个导航菜单,它将是一个链接列表。我从页面上现有的onclick事件获得这些链接的onclick事件,但是当我这样做时:

var linkLoc = $('#theLink').attr("onclick");

linkLoc返回:

function onclick(event) {
  handleJumpTo("com.webridge.entity.Entity[OID[E471CB74A9857542804C7AC56B1F41FB]]", "smartform");
}

而不是我期望的:

handleJumpTo("com.webridge.entity.Entity[OID[E471CB74A9857542804C7AC56B1F41FB]]", smartform");

我认为JQuery正试图获取绑定事件,但我需要实际的Javascript标记,因为我正在动态创建HTML。我想我可以将“函数onclick(event){”排除在外,但看起来有点像hacky。

我可以通过优雅方式获得onclick标记吗?

5 个答案:

答案 0 :(得分:3)

$("#theLink")将返回一个jQuery对象,而$("#theLink")[0]将返回一个DOM对象。这是$("#thelink")[0].getAttributeNode('onclick').value可以使用的resson。

答案 1 :(得分:2)

“onfoo”属性的值为函数,而不是字符串。语义:

<whatever onclick='code code code'>

是浏览器构造一个函数对象,就好像你有代码那样:

document.getElementById('whatever').onclick = new Function("event", "code code code");

因此你并不真正需要原始字符串,因为你有更好的东西:函数本身,准备被调用。然后,您可以通过JavaScript代码将其作为处理程序绑定到其他元素,而不是HTML(这实际上是一种更好的方法)。你说,你正在使用jQuery,所以你可以使用jQuery“.bind()”API将这些函数绑定到你需要的任何元素。

您还应该知道,还有其他方法可以将事件处理程序绑定到元素,这将使“onfoo”属性完全取消设置。

答案 2 :(得分:2)

$('#theLink').attr("onclick")的类型是一个函数,因此您可以在将事件绑定到链接时使用它。

var linkLoc = $('#theLink').attr("onclick");
$('a#link1').live('click', linkLoc);

示例:http://jsfiddle.net/BdU6f/

如果需要,您也可以在点击处理程序中运行其他代码:

var linkLoc = $('#theLink').attr("onclick");
$('a#link1').live('click', function(e){
    // Code...
    linkLoc(e);
});

示例:http://jsfiddle.net/BdU6f/1/

答案 3 :(得分:1)

如果我明白你要去哪里,你应该可以直接将返回的onclick功能分配到新的nav元素的onclick ......

$('#NewNavElement').click($('#theLink').attr('onclick'));

如果您需要向处理程序添加其他代码,则可以绑定另一个单击处理程序。

答案 4 :(得分:0)

试试这个;

$('#theLink').getAttributeNode('onclick').value

根据评论修改:

$('#theLink').get().getAttributeNode('onclick').value