我希望獲取元素是否存在單擊事件。原始網頁并不能更改且不固定,腳本是通過ChromeDriver寫入的。
$.data(ele, 'events') || $._data(ele, 'events');并不能獲取委托系結的點擊事件。
uj5u.com熱心網友回復:
window.document.body.addEventListener("onclick",function(){console.log("click0")})
$("body").click(function(){
console.log("click1");
});
console.log($._data($("body")[0]));uj5u.com熱心網友回復:
不得行,undefined
uj5u.com熱心網友回復:
你看看我的代碼能不能正常運行?我看你是寫錯了,在我的基礎上改吧。
$._data()回傳的是物件,不是陣列,沒有[0],你把[0]寫小括號里面看看
uj5u.com熱心網友回復:

你這個語法跟$.data(ele, 'events') || $._data(ele, 'events');其實是一樣的,委托的拿不到事件。
uj5u.com熱心網友回復:
你截圖最后一行不是有結果嗎?沒有系結事件怎么會有?
你就拿我的代碼運行一下,看看不行嗎?真是服了你了
uj5u.com熱心網友回復:
jquery 1.8之后的判斷元素是否系結事件的方法console.log("click" in $._data($("#id")[0],"events"));
uj5u.com熱心網友回復:
如果是委托系結的就要在所有祖先元素中遍歷判斷
function isBind(ele,en) {
ele = $(ele);
var eo = $._data(ele[0],"events");
if (eo && en in eo)
return true;
var ps = ele.parents().get()
ps.push(document,window);
return ps.some(function(t){
var eo = $._data(t,"events");
if (eo && en in eo) {
return eo[en].some(function(tf){
return $(tf.selector,t).is(ele);
});
}
});
}
alert(isBind($("#id"),"click"));
uj5u.com熱心網友回復:

tf.selector=undefined

uj5u.com熱心網友回復:
加個判斷條件return tf.selector && $(tf.selector,t).is(ele);
uj5u.com熱心網友回復:
那這樣我還是沒有找到委托系結事件的元素啊
uj5u.com熱心網友回復:

目前腳本測驗的是TopJUI前端框架頁面。如圖,能獲取到id="tree1365"的點擊事件,不能獲取到li元素存在點擊事件。
uj5u.com熱心網友回復:
topjui.com 是在事件函式內自己做的委托判斷,不是用jquery代理的事件委托系結方式。這種自己做的委托判斷沒辦法檢測出來。
uj5u.com熱心網友回復:
我這個方法只能判斷出用 $("ul").on("click", "li", function(event){}); 這樣事件委托的系結方式。uj5u.com熱心網友回復:
那就是沒辦法了
uj5u.com熱心網友回復:
還有沒有解決方案啊uj5u.com熱心網友回復:
插件里是拿不到原始網頁的js的bom物件,拿不到事件句柄。插件和原始網頁共享的只有dom。
這些屬于chrome安全策略
uj5u.com熱心網友回復:
在JQuery1.8之前:obj=$('div.event');obj.data('events');
在JQuery1.8中:
objs=$('div.event');$._data(objs[0],'events');
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/33582.html
標籤:JavaScript
