模拟在jQuery/JavaScript中单击链接

模拟在jQuery/JavaScript中单击链接,javascript,jquery,onclick,Javascript,Jquery,Onclick,我想用JavaScript模拟点击页面上的任何链接。如果该链接的某些函数被我无法控制的任何其他JS绑定到其“onclick”事件,则必须调用该函数,否则该链接应以正常方式运行并打开新页面 我不确定仅仅检查“onclick”处理程序的值是否足够。我想构建它,这样它就可以在任何链接元素上工作 我无法控制哪些函数可能绑定到链接的onclick事件,使用JS库(不一定是jQuery)或者简单地使用JavaScript 编辑:在下面答案的帮助下,似乎可以使用jQuery或onclick属性检查附加的事件处

我想用JavaScript模拟点击页面上的任何链接。如果该链接的某些函数被我无法控制的任何其他JS绑定到其“onclick”事件,则必须调用该函数,否则该链接应以正常方式运行并打开新页面

我不确定仅仅检查“onclick”处理程序的值是否足够。我想构建它,这样它就可以在任何链接元素上工作

我无法控制哪些函数可能绑定到链接的onclick事件,使用JS库(不一定是jQuery)或者简单地使用JavaScript


编辑:在下面答案的帮助下,似乎可以使用jQuery或onclick属性检查附加的事件处理程序。如何检查使用addEventListener/任何其他JS库附加的事件处理程序,以使其万无一失?

您可以使用该函数在所选元素上触发单击事件

例如:

$( 'selector for your link' ).click ();
您可以在jQuery中了解各种选择器

编辑:正如下面的评论所说;这仅适用于附加jQuery、内联或element.onclick样式的事件。它不适用于addEventListener,如果未定义任何事件处理程序,它也不会跟随链接。 你可以用这样的方法来解决这个问题:

var linkEl = $( 'link selector' );
if ( linkEl.attr ( 'onclick' ) === undefined ) {
    document.location = linkEl.attr ( 'href' );
} else {
    linkEl.click ();
}
不过我不知道addEventListener。

简单!只需使用jQuery的函数:

$("#theElement").click();
首先看一下这个,看看如何找到一个链接是否分配了jQuery处理程序

下次使用:

$("a").attr("onclick")
查看是否有分配给它的javascript事件

如果上述任何一项为真,则调用click方法。如果没有,请获取以下链接:

$("a").attr("href")
然后跟着它走

如果使用addEventListener添加事件处理程序,恐怕我不知道该怎么办。如果您负责整个页面的源代码,请仅使用jQuery事件处理程序。

$("#your_item").trigger("click");

使用.trigger可以模拟多种类型的事件,只需将其作为参数传递。

当您使用rails remote form按钮模拟单击按钮时,所有这些可能都无济于事。我尝试从这里的原型移植nice事件模拟:。刚刚做了,对我很有用。

试试这个

function submitRequest(buttonId) {
    if (document.getElementById(buttonId) == null
            || document.getElementById(buttonId) == undefined) {
        return;
    }
    if (document.getElementById(buttonId).dispatchEvent) {
        var e = document.createEvent("MouseEvents");
        e.initEvent("click", true, true);
        document.getElementById(buttonId).dispatchEvent(e);
    } else {
        document.getElementById(buttonId).click();
    }
}
你可以像这样使用它

submitRequest("target-element-id");

为什么不仅仅是好的ol'javascript



$'element'[0]。在我读到的内容中,单击

,jQuery的单击函数不是只触发那些使用jQuery绑定到元素的单击事件的函数吗?它无论如何都不起作用。@Ankit:它还会触发任何内联事件处理程序ie`onclick=…,但是是的,否则你是对的。@Crescent谢谢,我不知道啊,对不起,这是一个比我意识到的更难的问题!请参阅Roberton对上述答案的评论,这是不正确的。它适用于所有事件,不管它是如何绑定的。click方法触发链接的onclick方法。它不遵循href属性中定义的url。@Jan:这也不是真的。它在内联onclick处理程序上工作,但在其他情况下,它只处理与jQuery本身绑定的事件。例如,如果有其他事件与addEventListener绑定,jQuery将错过这些事件。@Crescent:你说得对,对此表示抱歉。但是,如果您执行类似于:element.onclick=…True的操作,它就会起作用,但是与其他JS绑定的事件我没有任何控制权,正如OP所提到的,例如addEventListener或attachEvent jQuery无法了解这些:如果我负责页面源代码,它会变得容易得多。不幸的是,我将它构建为一个插件,因此它需要完全万无一失。如何使用addEventListener/任何其他JS库检查附加的事件处理程序,以确保它万无一失?现在这是一个复制品;但是仍然看不到解决方案:也许换个角度,尝试通过创建MouseEvent来模拟点击@安基特:是的,完全正确,第二个答案将解雇处理者,不管他们是如何被连接的。你仍然说,否则链接应该以正常的方式运行,并打开一个新页面。你会有问题的。很抱歉,我没有时间在这里提供更多帮助。@我尝试了上述方法,该方法仅适用于Firefox。dispatchEvent方法返回bool值取决于是否触发了preventDefault。我检查这个值,如果链接的href属性设置为查看链接是否应该打开另一个页面,@Crescent,顺便说一句,你帮了大忙。它认为我将更多地使用StackOverflow,而不是没完没了的谷歌搜索:这非常有效。感谢您发布非jquery版本。由于某些原因,jquery单击不起作用,但dispatchEvent起作用。知道为什么吗?我通过一个chrome扩展点击ExtJS网站,通过访问jQuery集中的第一个元素,您将获得一个DOM元素,接下来您将从HtmleElement接口调用一个方法,这实际上是一个好的ol'javascriptAh!我的错。我没有注意到[0]。但为什么要这样做呢?jQuery支持程序
这也是一个.click方法,所以只要$'element'。单击就足够了。另一方面,如果你真的想用普通的ol'javascript,document.getElementById'element.点击就可以了,对吧?问题是,我记得有一次必须这样做,因为在IE的jQuery.click或.trigger函数实际上并没有触发事件。。。因此,您将获得比强大的jquery选择器更大的优势,然后只需获得DOM元素即可对其执行任何javascript操作。非常感谢我的朋友,在全新javascript失败的地方,良好的ol'javascript工作正常:d如果您想知道在哪种情况下:尝试使用javascript点击Facebook的戳按钮。这[0]真的很重要!: