Tampermonkey .click()无效

时间:2016-08-27 19:51:16

标签: javascript jquery tampermonkey

我试图自动点击tampermonkey中的按钮,但由于某种原因,代码没有执行。但是,如果我将代码放在控制台中并运行它,它可以正常工作。

这是:

$(document).ready(function() {
    path = window.location.pathname;
    setTimeout(autoTraderReady, 10);
    $('#VehicleApplyButton').click();
});
<table id="VehicleApplyButton" class="x-btn va-apply-button x-btn-noicon x-column" cellspacing="0"><tbody class="x-btn-small x-btn-icon-small-left"><tr><td class="x-btn-tl"><i>&nbsp;</i></td><td class="x-btn-tc"></td><td class="x-btn-tr"><i>&nbsp;</i></td></tr><tr><td class="x-btn-ml"><i>&nbsp;</i></td><td class="x-btn-mc"><em class=" x-unselectable" unselectable="on"><button class=" x-btn-text" id="ext-gen147" type="button">&nbsp;</button></em></td><td class="x-btn-mr"><i>&nbsp;</i></td></tr><tr><td class="x-btn-bl"><i>&nbsp;</i></td><td class="x-btn-bc"></td><td class="x-btn-br"><i>&nbsp;</i></td></tr></tbody></table>

按钮不会动态切换,尝试在功能运行时发出警报,不会提示我。

2 个答案:

答案 0 :(得分:2)

鉴于你的代码:

1. $(document).ready(function() {
2.     path = window.location.pathname;
3.     setTimeout(autoTraderReady, 10);
4.     $('#VehicleApplyButton').click();
5. });

根据您在下面的评论,第4行的点击预计会触发从文档中其他位置的.click侦听器触发的AJAX请求。如果这个监听器存在于外部脚本中,我怀疑另一个监听器是否能及时捕获你正在触发的click事件。也就是说,在点击已经解雇后,它开始监听

$(document).ready只等待加载DOM,而不是外部脚本;请尝试将第1行更改为$(window).on('load', function(){...});

如果失败,请尝试添加以下调试行:

1. $(document).ready(function() {
2.     console.log( $('#VehicleApplyButton') );
3.     $('#VehicleApplyButton').click(function(e){ console.log( e ) } );
4.     $('#VehicleApplyButton').click();
5. });

第2行 - 确认#VehicleApplyButton存在

第3行 - 确认点击事件正在传播

注意:我的初稿忽略了jQuery.click()解释为没有参数的.trigger('click')的快捷方式,而不是1-2的倾听者.on('click',[data],handler) PARAMS。感谢礼貌的纠正,@ robertklep。

答案 1 :(得分:0)

对我来说,这与我触发事件的特定页面有关。

jQuery.click() 和普通 elem.click() 都不起作用。 我解决了创建像这样的 MouseEvent 的解决方法:

let btn = document.querySelector('.submitButton');

let clickEvent = new MouseEvent("click", {
        bubbles: true,
        cancelable: true,
        clientX: 150,
        clientY: 150
});

btn.dispatchEvent(clickEvent);

所以也许它也与您的 EventBubbling 有关。