使用jQuery .click()(或类似)在href属性中触发javascript

时间:2011-08-03 13:29:51

标签: javascript jquery onclick

不幸的是,我正在使用一些第三方javascript,它会在我的网页中插入链接。我不想直接使用这些链接,而是使用代理元素,当点击它时,会触发第三方链接上的点击事件。

第三方链接将javascript包装到href属性中,如下所示:

<a id="horribleLink" href="javascript:doSomething()">Click me</a>

我的代理元素如下所示:

<button rel="horribleLink" class="linkProxy">No, click me</button>

还有一些jQuery的javascript将它们链接在一起:

$('button.linkProxy').click(function(){
    $('#' + $(this).attr('rel')).click();
});

现在,如果第三方链接只是一个标准链接(<a id="horribleLink" href="http://www.google.com">Click</a>),或者稍微不那么糟糕的onclick(<a href="#" id="horribleLink" onclick="doSomething()">Click</a>),这就完美了。 javascript在href属性中,触发'click'什么都不做。

任何人都可以告诉我原因,以及是否有合理的解决方法?

已更新正如Millimetric所说,根本原因似乎是浏览器阻止了对锚点的“伪造点击” - 我删除了我的“标准链接”示例,因为这是另一种情况工作。但是,onclick处理程序确实可以正常工作。

5 个答案:

答案 0 :(得分:11)

这里接受的答案深入探讨了“为什么会这样”:Can I call jquery click() to follow an <a> link if I haven't bound an event handler to it with bind or click already?。基本上,似乎你不能在链接上执行click(),因为浏览器不支持虚假点击。

一次解决方案

如果为这些情况设置location.href,它可以工作:

$('button.linkProxy').click(function(){
    location.href = $('#' + $(this).attr('rel')).attr('href');
});

工作小提琴:http://jsfiddle.net/uv29x/3/

两种解决方法

您可以获取这些链接的href并对其进行eval(),对吗?

答案 1 :(得分:4)

window.location设置为href值。

$('button.linkProxy').click(function(){
    window.location = $('#'+$(this).attr('rel')).attr('href');
});

DEMO:http://jsfiddle.net/dmSUm/

答案 2 :(得分:2)

当我看到Milimetric的回答时,我刚刚打完这个。无论如何,这是代码的价值 -

eval($('#horribleLink').attr('href').replace('javascript:',''));

答案 3 :(得分:0)

使用原生的Javascript click方法,您可以获得有效的点击效果!

$('button.linkProxy').click(function(){
    $('#' + $(this).attr('rel')).click()[0].click();
});

我保持jQuery click 假设 Javascript click将绕过jQuery trigger,在这种情况下,您将要同时保留两者。否则,如果我错了(或者你不需要考虑trigger),你可以将它减少到:

$('button.linkProxy').click(function(){
    $('#' + $(this).attr('rel'))[0].click();
});

答案 4 :(得分:-1)

如果我正确理解了这个问题,问题就是你有这样的事情:

 <a href="javascript:alert('hello');" onclick="javascript:alert('clicked');">Test</a>

并且你声称当javascript在href上时,onclick事件不会被触发。正确?如果是这样,我看到的是两个都被解雇,首先是onclick然后是href里面的javascript。