[英]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.