现在这里有很多类似的问题,但是我想知道,如果我不想更改窗口的location,而是触发可能绑定(bind)到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');

这不会带您去Google,我想做到。

更新:.click()无法正常工作。 trigger('click')preventDefault与这个无关

最佳答案

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

我在这个jQuery'plugin'中总结了所有这些内容:

$.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();

10-04 22:39
查看更多