如何以编程方式单击带有javascript的链接?


Answers:


243
document.getElementById('yourLinkID').click();

18
实际上,到目前为止,它在我尝试过的所有浏览器中都可以使用,包括IE,Safari,Chrome,Firefox和Opera。
2012年

5
请注意,如果链接具有target="_blank"属性,则将为新窗口激活浏览器的弹出窗口阻止程序。
wonsuc

45

此功能至少在Firefox和Internet Explorer中有效。如果事件处理程序没有取消默认操作,它将运行链接上附加的所有事件处理程序,并加载链接的页面。

function clickLink(link) {
    var cancelled = false;

    if (document.createEvent) {
        var event = document.createEvent("MouseEvents");
        event.initMouseEvent("click", true, true, window,
            0, 0, 0, 0, 0,
            false, false, false, false,
            0, null);
        cancelled = !link.dispatchEvent(event);
    }
    else if (link.fireEvent) {
        cancelled = !link.fireEvent("onclick");
    }

    if (!cancelled) {
        window.location = link.href;
    }
}

5
马修是正确的,而stackoverflow.com/questions/809057/…上有关于原因的更多信息。跨浏览器很有趣:)
Dan F

4
它不尊重target属性或<base target="frame">
Vitim.us 2015年

40

如果您只想更改当前页面地址,则可以通过在Javascript中执行以下操作来实现:

location.href = "http://www.example.com/test";

53
之所以投票,是因为我不喜欢围绕用例回答的问题,而不是解决它。“我认为这是您的意图,并且没有意识到您的限制,因此,在概念空缺的概念范围内:使用此功能。”
cazlab 2012年

12
我投了赞成票,因为我一直在寻找mailto:在userjs脚本中单击链接的一些不错的解决方案。绝对节省了我的时间。我准备创建a元素,使一些“程序,点击” stackoverflow.com/questions/809057/...
AD

6
我也尝试过click()在其他地方提出的调用方法,但该方法在IE9中不起作用,但是设置location.href实际上是从mailto:链接发送了电子邮件。很好的解决方案!
2015年

该方法对PyQT4很有帮助。click()呼叫对我不起作用。谢谢!
VilleLipponen

没有解决我想在其中单击链接的问题的用例。该链接无处可去,但是与点击事件相关联。我不想更改位置。
随机大象

18

就像这样:

<a id="myLink" onclick="alert('link click');">LINK 1</a>
<a id="myLink2" onclick="document.getElementById('myLink').click()">Click link 1</a>

或页面加载时:

<body onload="document.getElementById('myLink').click()">
...
<a id="myLink" onclick="alert('link click');">LINK 1</a>
...
</body>

2
是的,但是还必须进行一些其他单击。
奥拉维尔Waage

2
您不能在任何事件(例如页面加载)上执行此操作吗?
比尔蜥蜴

2
感谢您的帮助,但即时通讯使用firefox 3,并且无法正常工作,在错误控制台中显示错误:document.getElementById(“ myLink”)。click不是一个函数

似乎Firefox不支持click方法。并且大多数答案(包括我的答案)都无济于事:)
Canavar 2009年

@Canavar:尝试单击而不是单击
Stefan Steiger

9

jQuery单击链接的方式是

$('#LinkID').click();

对于mailTo链接,您必须编写以下代码

$('#LinkID')[0].click();

2
这是行不通的。这不是他所问问题的答案。如果我还有其他观点,我对此会否定。

2
这行不通吗?您尝试过了吗?希望您理解“ LinkID”的含义。如果如今某人对没有jQuery的js足够落后,我真的会感到惊讶。无论如何,在获得一些积分后,请随意投票
Muhammad Waqas Iqbal

3
我尝试了这个,但是mailTo链接在React Native中不起作用。使用这个:window.location.href =“ mailto:address@gmail.com”;
fungusanthrax

4
单击a链接对我来说都不起作用。使用该[0].click()版本的作品,我相信与document.getElementById('yourLinkID').click();答案是相同的。
毫米

Firefox浏览器:此功能适用于<input>,但不适用于<a>
jimver04 '18

4

对于我来说,我设法使其发挥了作用。我在5000毫秒内部署了自动点击,然后在1000毫秒后关闭了循环。然后只有1次自动点击。

<script> var myVar = setInterval(function ({document.getElementById("test").click();}, 500)); setInterval(function () {clearInterval(myVar)}, 1000));</script>

显示的代码中存在语法错误。缺少一两个闭合括号。我通过编辑添加了它们。
记者

3

不建议使用上述许多方法。现在建议使用在这里找到的构造函数

function clickAnchorTag() {
    var event = document.createEvent('MouseEvent');
    event = new CustomEvent('click');
    var a = document.getElementById('nameOfID');
    a.dispatchEvent(event);
}

这将导致单击锚标记,但不会显示弹出窗口阻止程序是否处于活动状态,因此用户将需要允许弹出窗口。


3
我不明白为什么事件要设置两次。我看不到event = new CustomEvent('click'); 是参考事件,那么var的意义是什么?
–historystamp

我认为您是正确的historystamp。他正在创建一个mouseevent,然后立即用一个新事件覆盖它。
约翰·洛德

1

除了点击之外,您还可以使用Javascript转发到点击将到达的URL吗?

也许您可以在onLoad体内放置一些东西以移动到所需位置。


我发布了这两个问题,因为人们在处理“标签”链接时不会自然地查找按钮信息。它们在技术上无关。
Scott Tovey

1

您可以将它们重定向到另一个页面。实际上,实际上是单击链接并访问它似乎是不必要的,但我不了解整个故事。


2
就我而言,我不知道链接是否具有目标“ _blank”,因此我不知道应该使用location.href还是window.open。发出点击的时间要短一些。有一些用例,例如,您可能要触发一个事件,例如打开模式框。
dxvargas

-2

客户端JS功能可在...时自动单击链接

这是一个示例,其中您检查了隐藏表单输入的值,该隐藏表单输入包含从服务器传递来的错误。.您的客户端JS然后检查它的值,并在您指定的其他位置填充错误。出现弹出式登录模式。

var signUperror = document.getElementById('handleError')

if (signUperror) {
  if(signUperror.innerHTML != ""){
  var clicker = function(){
    document.getElementById('signup').click()
  }
  clicker()
  }
}

-3

您无法使用户的鼠标执行任何操作。但是,您可以完全控制事件触发时发生的情况。

您可以做的就是点击身体负荷。W3Schools在这里有一个示例


6
@Neolit不管怎么说,它仍然是一个错误的链接,直到得到404。没有损失。
约翰·德沃夏克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.