jQuery click()触发HTML的OnClick属性

时间:2014-08-01 17:54:41

标签: javascript jquery html

我有(有?)这个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的最终版本的确切版本。

感谢任何方向或帮助。

2 个答案:

答案 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)让你的代码工作。