Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用JQuery获取onclick()事件的字符串值_Javascript_Jquery - Fatal编程技术网

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

Javascript 使用JQuery获取onclick()事件的字符串值,javascript,jquery,Javascript,Jquery,不知道是否有好的方法可以做到这一点,我想我会发布到SO社区 有一个第三方网页,我无法控制它的呈现方式,但它们允许我添加JQuery 使用JQuery,我在页面的一侧创建了一个导航菜单,它将是一个链接列表。我从页面上已有的onclick事件中获取这些链接的onclick事件,但当我执行以下操作时: var linkLoc = $('#theLink').attr("onclick"); linkLoc返回: function onclick(event) { handleJumpTo("co

不知道是否有好的方法可以做到这一点,我想我会发布到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。我想我可以将“function onclick(event){”子串出来,但似乎有点不对劲

有没有什么好主意可以让我得到onclick标记?

onfoo属性的值是函数,而不是字符串。其语义如下:

<whatever onclick='code code code'>
因此,您实际上不需要原始字符串,因为您已经有了更好的东西:函数本身,可以随时调用。然后,您可以通过JavaScript代码将其作为处理程序绑定到其他元素,而不是HTML(这确实是一种更好的方法)。您可以说,您使用的是jQuery,因此可以使用jQuery“.bind()”API将这些函数绑定到您需要的任何元素

您还应该知道,还有其他将事件处理程序绑定到元素的方法,这些方法会使“onfoo”属性完全未设置

$('#theLink').getAttributeNode('onclick').value
根据意见修订:

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

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

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

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

示例:

如果我理解您的意图,您应该能够将返回的onclick函数直接分配给新导航元素的onclick

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

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

$(“#theLink”)
将返回一个jQuery对象,而
$(“#theLink”)[0]
将给出一个DOM对象。这是一个表达式,
$(“#theLink”)[0]。getAttributeNode('onclick')).value
将起作用。

这不起作用。
对象[Object Object]没有方法“getAttributeNode”
@Rocket,很抱歉。我忘记了getAttributeNode是在DOM元素上执行的,而不是在jquery选择器上执行的。我已使用修订版本更新了答案,请重试。上面的方法不起作用,但
$(此)[0]。getAttributeNode('onclick').value
didpointy,但是bind()并没有真正的帮助,因为我当时实际上是在原始HTML中创建新对象(我在链接中循环并创建一个新的对象列表)。基本上,我应该绑定到的东西还不存在。@Mark Kadlec您可以创建元素并将它们添加到DOM中,然后绑定事件处理程序,也可以使用“.live()”或“.delegate()”在某个容器元素上处理事件。嗯,你让我想到了,这可能也会起作用。我只是想,既然我正好能够创建链接,那么在那里创建链接会更容易。Live()可能是更好的方法,谢谢!请看我对Rocket的回复,我不能真正使用Live()由于函数不是静态定义的,因此调用中的OID值对于每个链接都是唯一的。@标记Kadlec,然后您可以构建一个映射某些标识符的表(如“id”或“class”值)从事件目标到正确的事件处理程序函数。您的处理程序可以使用它来适当地委托事件处理。谢谢Rocket,但请参阅我对上面Pointy的响应。我希望可以直接绑定,但链接还不存在,我正在JQuery中将它们创建为原始html,然后在生成html后将它们注入DOM你出卖了我,我以为我是按我的方式做的,但是活着可能更好,谢谢你的反馈!嗯,这不起作用,因为每个链接的链接位置都是唯一的。函数中的OID对于每个链接都是唯一的,这意味着每个链接都有一个唯一的Javascript参数。如果只有一个链接可以工作,但可能有10个唯一的链接,我必须循环through@Mark:当每个链接在创建时,只需确保为其分配了正确的事件。您是唯一真正回答OP问题的人,祝您好运
$('#NewNavElement').click($('#theLink').attr('onclick'));