3

我在 jQuery 中遇到了一个好奇心:如果我调用.click()一个链接,click则会调用事件处理程序,但实际上并没有遵循该链接(就像在浏览器中单击它一样):

<a id="link" href="http://www.google.com>Link</a>

$("#link").click() // won't take me to Google

但在纯 Javascript 中,一切都按预期运行:

document.getElementById("link").click() // *will* take me to Google

这显然是故意的行为-但我正在努力弄清楚为什么要这样click实施-链接有一个特殊例外?

在这里摆弄:http: //jsfiddle.net/9a6sp/

澄清一下:我不是在问如何在 JS 中单击链接,而是为什么 jQuery 中的默认行为实际上是在您调用时不单击链接.click()

4

5 回答 5

8

domelement.click()不支持跨浏览器进行重定向。如果您需要重定向到链接中的位置,您可以使用:

window.location = $('#link').prop('href');
于 2011-11-14T18:56:17.547 回答
4

jQuery.click()旨在将点击处理程序绑定到元素。然而,它可以用来触发使用 jQuery 绑定的 click() 事件。

jQuery.trigger()将触发一个绑定的事件处理程序,例如$(someElement).trigger("click");

如果您想在 jQuery 中触发链接,我可以建议以下内容。

$(someelement).click(function () {
  window.location = $(link).attr("href");
});
于 2011-11-14T18:56:28.877 回答
0

也许这就是你要找的?首先,您需要附加一个点击事件。然后你可以使用触发器来触发它。

<html>
<head title="jQuery Test">
    <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.7.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            $('#blah').click(function () {
                alert('clicked');
            });
            $('#blah').trigger('click');
        });
    </script>
</head>
<body>
    <a id="blah" href="#">BLAH</a>
</body>
</html>
于 2011-11-14T19:11:57.503 回答
0

为什么这不起作用,在 jsFiddle$('#link')中没有选择 html 中的锚点,并且click()失败了。甚至类型选择器也会$('a').href失败。

http://jsfiddle.net/yangchenyun/L9EUS/

该代码在普通浏览器中工作。jQuery('a').eq(1).click()我已经在 chrome concole 中使用此代码测试了 stackoverflow.com 上的代码 ,它触发click()了徽标上的 。

所以总而言之,click() 链接在 jQuery() 中有效。jsfiddle.net 已经中断了正常的 jQuery 功能。

于 2011-11-14T19:18:08.470 回答
-1

我只是猜测jQuery 团队为什么选择以这种方式实现,因为我不在 jQuery 团队中,但是锚标记的导航方面可以由其他 UI 行为触发,而不仅仅是用鼠标单击。例如,在普通的旧 javascript 中,使用键盘激活元素不会触发 onClick 动作,但触发锚标记的导航动作。

换句话说,通过单击链接,您只是使用了几种可能的机制之一来导航到引用的端点,但是导航和单击不是同一个事件,因此 jQuery 选择仅处理单击。

于 2011-11-14T19:06:01.130 回答