Javascript 如何模拟用户在JQuery中单击链接?

Javascript 如何模拟用户在JQuery中单击链接?,javascript,jquery,Javascript,Jquery,现在这里有很多类似的问题,但我想知道,如果我不想仅仅更改窗口的位置,而是触发可能绑定到单击事件的任何函数,并且只更改href如果他们同意,或者只是重定向,我该怎么办,如果没有听众 例如: var a = $('.edithost'); a.click(function() {return false;}); 如果我用鼠标点击链接,它永远不会把我带到href,所以只要将用户重定向到attr('href'),就会改变页面的预期行为。此外,点击不仅适用于链接,而且也适用于按钮,在这种情况下,我必须提

现在这里有很多类似的问题,但我想知道,如果我不想仅仅更改窗口的
位置
,而是触发可能绑定到
单击
事件的任何函数,并且只更改
href
如果他们同意,或者只是重定向,我该怎么办,如果没有听众

例如:

var a = $('.edithost');
a.click(function() {return false;});
如果我用鼠标点击链接,它永远不会把我带到href,所以只要将用户重定向到
attr('href')
,就会改变页面的预期行为。此外,点击不仅适用于链接,而且也适用于按钮,在这种情况下,我必须提交表单,等等

所以我想知道,是否有可能模拟单击某个元素,使浏览器的所有行为都完全相同,就像用鼠标单击一样

不能有任何侦听器绑定到链接

例如:

var a = $('<a href="google.com">google</a>');
a.click();
a.trigger('click');
var a=$('');
a、 单击();
a、 触发(“点击”);
这不会带你去谷歌,我想让它去

更新:
。单击()
无效<代码>触发器('click')也是<代码>预防默认值与此无关

是的,非常简单:

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

这将模拟用户单击。

我真的不知道您想要做什么。 为此:

a.click(function(e){
e.preventDefault();
});
您可以停止事件的默认行为(在本例中,重定向到a.attr('href'))。 然后,您可以执行任何需要的任务,然后手动重定向用户

这就是你要找的吗

如果要触发单击事件,只需执行以下操作

a.click();
尝试
a[0]。单击()


这将执行DOM元素的
click
方法,而不是触发事件。

在IE中,您可以调用元素上的
。click()
,但对于标准浏览器,您需要通过创建本机鼠标事件来模拟click事件,然后使用
dispatchEvent
来触发它

我在这个jQuery“插件”中总结了这一切:

$.fn.simulateClick = function() {
    return this.each(function() {
        if('createEvent' in document) {
            var doc = this.ownerDocument,
                evt = doc.createEvent('MouseEvents');
            evt.initMouseEvent('click', true, true, doc.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
            this.dispatchEvent(evt);
        } else {
            this.click(); // IE
        }
    });
}
现在,只要打电话:

$('.edithost').simulateClick();

它只会触发绑定到单击事件(如果有)的侦听器-它不会重定向用户,除非其中一个侦听器重定向-这与鼠标单击不同是的,您是对的:)。根据给出的解释,我假设他的函数具有这些侦听器。
click
不会触发本机click事件。当您使用.click()然后使用.PreventDefault()时,是否尝试了live()jquery函数?在Firefox中工作得很好,你知道它在其他浏览器中是否得到了正确的支持吗?这在WebKit中不起作用,你需要手动创建事件。+1来自我。我删除了我的答案,因为它基本上是一样的。我(希望)对它进行了改进:`$.fn.simulateClick=function(){if('createEvent'在文档中){var doc=doc;var evt=doc.createEvent('MouseEvents');evt.initMouseEvent('click',true,true,doc.defaultView,1,0,0,0,false,false,false,false,false,false,0,null);返回此.each(函数(){this.dispatchEvent(evt);});}否则返回此.each(函数(){this.click();//IE});}`