我有(有?)这个Greasemonkey脚本,它使用了相当多的jQuery来设置Web表单中的一些默认值。 Web表单来自HP无线网络控制器,因此我不相信我可以修改生成的HTML。
脚本运行正常,直到Firefox更新出现。现在,所有jQuery click()和dblclick()调用都不起作用。他们抛出异常:
Permission denied to access property 'length'
我试图“点击”的HTML是:
<input id="plan_selection-1" type="radio" onclick="UpdateSectionStates();" value="valid_time" name="plan_selection">
我正在使用以下jQuery来点击:
$('#plan_selection-1').trigger("click");
我尝试了一些不同的东西(使用.click(),我收集的是.trigger(“click”),发送一个真实的鼠标事件,如jQuery click() not working in a Greasemonkey/Tampermonkey script所述,但这失败了, as dispatchEvent()“不是函数”。
直到几个星期前,这一直在进行,但我还没有回过头来确定FF的最终版本的确切版本。
感谢任何方向或帮助。
答案 0 :(得分:2)
这个问题有几种解决方法。
您可以尝试查看点击事件是否适用于纯JS
document.getElementById("plan_selection-1").click();
否则,如果您只想将元素设置为选中并调用您的函数...
document.getElementById("plan_selection-1").checked = true;
UpdateSectionStates();
您可能希望通过检查选择器是否返回元素来测试JQuery是否正常工作。
答案 1 :(得分:0)
您是否尝试手动调度事件,即纯js
var input = $('#plan_selection-1')[0];
var evt = document.createEvent("MouseEvents");
evt.initMouseEvent("click", true, true, window,
0, 0, 0, 80, 20, false, false, false, false, 0, null);
input.dispatchEvent(evt);
说明:这是在纯js中触发事件的方式。此外,您不需要重新创建鼠标evet,您可以多次将相同的一个发送到不同的元素,因此,如果这样做,您可以创建一个鼠标事件,并按顺序将每个$('#plan_selection-1').trigger("click")
替换为$('#plan_selection-1')[0].dispatchEvent(evt)
让你的代码工作。