繁体   English   中英

jQuery click()触发HTML的OnClick属性

[英]jQuery click() to trigger HTML's OnClick property

我有(有?)这个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()所述,发送了一个实际的鼠标事件, 在Greasemonkey / Tampermonkey脚本中不起作用 ,但是,这失败了,因为dispatchEvent()“不是函数”。

直到几周前,它一直在工作,但是我没有回过头来了解FF的最新版本是什么。

任何方向或帮助表示赞赏。

有两个解决此问题的方法。

您可以尝试查看点击事件是否适用于纯JS

 document.getElementById("plan_selection-1").click();

否则,如果您只想将元素设置为selected并调用函数...

document.getElementById("plan_selection-1").checked = true;
UpdateSectionStates();

您可能希望通过检查选择器是否返回元素来测试JQuery是否在正常工作。

您是否尝试过手动调度事件,即纯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中触发事件的方式。 同样,您也不需要重新创建鼠标事件,可以多次将相同的事件分派给不同的元素,因此,如果$('#plan_selection-1').trigger("click") ,您可以创建一个鼠标事件,只需替换每个$('#plan_selection-1').trigger("click")$('#plan_selection-1')[0].dispatchEvent(evt) ,以使您的代码正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM