将click事件发送到父锚点

时间:2009-12-03 17:15:07

标签: javascript jquery

如何将单击事件(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。

4 个答案:

答案 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)

正常链接与正常HREF的

// assuming the link is always the immediate parent of #btn1
$("#btn1").parent().trigger("click");

与Javascript命令链接为HREF的

我注意到你的情况虽然你的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')