2

我在通过 Greasemonkey/Tampermonkey 触发 jQuery 点击时遇到问题...

jQuery('button').each(function() {
    jQuery(this).css('background', 'red');
    jQuery(this).click();
    location.assign("javascript:jQuery(this).click();void(0)");
}​

如您所见,我什至尝试了location.assign hack,但没有任何效果,控制台中也没有错误。

有趣的是,是的,背景颜色确实变为红色,所以我假设它的.click()工作方式与其他 jQuery 方法不同。

4

1 回答 1

8

jQuery's.click()只是 jQuery's.trigger()和来自Docs的快捷方式:

当相应的事件发生时,任何附加了 .bind() 或其快捷方法的事件处理程序都会被触发。但是,可以使用 .trigger() 方法手动触发它们。

这意味着不是由 jQuery 设置的事件处理程序不能总是由.click()(or .trigger()) 触发。

为了解决这个问题,发送实际的鼠标事件:

jQuery ('button').each ( function () {
    jQuery (this).css ('background', 'red');

    var clickEvent  = document.createEvent ('MouseEvents');
    clickEvent.initEvent ('click', true, true);
    this.dispatchEvent (clickEvent);
}




请注意,在极少数情况下,页面实际上会处理事件的组合,而不是click,并且理论上,页面可以区分任何人为产生的事件(尽管我还没有在野外看到)。
如果是这种情况,请链接到目标页面,以便我们可以解决问题。

于 2012-05-03T00:35:11.497 回答