如何将单击事件(JS或JQuery)发送到作为锚点的父对象?我的基本HTML看起来像:
<a href="javascript:myFunc(1,2,3)">
<img id="btn1" src="myimg.png">
</a>
所以我可以通过按钮轻松地引用锚点:
document.getElementById('btn1').parentNode
然而,
document.getElementById('btn1').parentNode.click
虽然它似乎没有在firebug上的控制台中引发错误,但javascript函数似乎也没有触发。如何向此内容发送点击。顺便说一句,我无法控制HTML,所以我不能只为锚标记添加ID。
答案 0 :(得分:4)
可以使用href="javascript:blah"
的日子已经一去不复返了,特别是如果您使用的是jQuery,Dojo,ExtJs等库。事件处理程序应始终附加在HTML之外。
$(function() {
$("#btn1").click(function() {
$(this).parent().click();
};
});
这是一个可以在SO页面上测试的片段(复制+粘贴到Firebug中)
$("#hlogo a").click(function() {
alert("a!");
return false;
});
$("#hlogo a img").click(function() {
alert("img!");
$(this).parent().click();
});
答案 1 :(得分:0)
// assuming the link is always the immediate parent of #btn1
$("#btn1").parent().trigger("click");
我注意到你的情况虽然你的HREF值是一个带有参数的javascript函数的调用。为此,您可能希望评估该HREF,而不是单击链接:
// run the href-javascript from the parent anchor
eval($("#btn1").parent().attr("href"));
我已经构建了一个测试用例并使用了firebug来尝试这两种方法。第一个返回1
,显示链接被点击,但javascript永远不会被执行。第二种方法实际上执行链接本身的HREF值中找到的javascript。这应该是满足您特定需求的适当解决方案。
答案 2 :(得分:0)
编辑:忽略这个答案,因为它对链接没有好处;请参阅以下评论。
click
元素的a
属性是一个函数属性,也就是一个方法;你所做的只是引用属性,而不是调用它。
document.getElementById('btn1').parentNode.click();
(注意()
导致调用该方法)应该这样做,但是如果你已经使用了jQuery,那么Jonathan Sampson's answer会做你需要的 - 加载库没有意义然后不使用它: - )
虽然乔纳森的答案可以缩短,jQuery provides a click
method:
$("#btn1").parent().click();
答案 3 :(得分:0)
jQuery方式可能是这样的:
$(event.target).closest('a').trigger('click')
或者用你的话来说就是这样
$('#bth1').closest('a').trigger('click')