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

时间:2011-11-28 10:51:36

标签: javascript jquery

现在这里有很多类似的问题,但我想知道,如果我不想只改变窗口的location,我会怎么做,但是触发任何可能绑定的函数click事件,只有在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');

这不会带你去谷歌,我想做到。

更新: .click()无效。 trigger('click')也是。 preventDefault与此无关

4 个答案:

答案 0 :(得分:14)

在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();

答案 1 :(得分:2)

尝试a[0].click();

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

答案 2 :(得分:0)

是的,很简单:

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

这将模拟用户点击。

答案 3 :(得分:-1)

我真的不知道你想做什么。 有了这个:

a.click(function(e){
e.preventDefault();
});

您可以停止事件的默认行为(在这种情况下,重定向到a.attr('href'))。 然后,您可以执行所需的任何任务,然后手动重定向用户。

这是你要找的吗?

如果您想触发点击事件,请执行

a.click();