JS怎么获取元素是否存在点击事件(委托绑定)

本人QQ-554433626 2020-06-17 04:20:36
我希望获取元素是否存在单击事件。原始网页并不能更改且不固定,脚本是通过ChromeDriver写入的。
$.data(ele, 'events') || $._data(ele, 'events');并不能获取委托绑定的点击事件。
...全文
11427 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
浴火_凤凰 2020-06-29
  • 打赏
  • 举报
回复
在JQuery1.8之前: obj=$('div.event');obj.data('events'); 在JQuery1.8中: objs=$('div.event');$._data(objs[0],'events');
cn00439805 2020-06-29
  • 打赏
  • 举报
回复
插件里是拿不到原始网页的js的bom对象,拿不到事件句柄。 插件和原始网页共享的只有dom。 这些属于chrome安全策略
本人QQ-554433626 2020-06-29
  • 打赏
  • 举报
回复
还有没有解决方案啊
本人QQ-554433626 2020-06-21
  • 打赏
  • 举报
回复
引用 15 楼 天际的海浪 的回复:
我这个方法只能判断出用 $("ul").on("click", "li", function(event){}); 这样事件委托的绑定方式。
那就是没办法了
本人QQ-554433626 2020-06-19
  • 打赏
  • 举报
回复
引用 8 楼 天际的海浪 的回复:
如果是委托绑定的就要在所有祖先元素中遍历判断

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"));
tf.selector=undefined
天际的海浪 2020-06-19
  • 打赏
  • 举报
回复
我这个方法只能判断出用 $("ul").on("click", "li", function(event){}); 这样事件委托的绑定方式。
天际的海浪 2020-06-19
  • 打赏
  • 举报
回复
topjui.com 是在事件函数内自己做的委托判断,不是用jquery代理的事件委托绑定方式。 这种自己做的委托判断没办法检测出来。
本人QQ-554433626 2020-06-19
  • 打赏
  • 举报
回复
引用 11 楼 天际的海浪 的回复:
加个判断条件 return tf.selector && $(tf.selector,t).is(ele);
目前脚本测试的是TopJUI前端框架页面。如图,能获取到id="tree1365"的点击事件,不能获取到li元素存在点击事件。
本人QQ-554433626 2020-06-19
  • 打赏
  • 举报
回复
引用 11 楼 天际的海浪 的回复:
加个判断条件 return tf.selector && $(tf.selector,t).is(ele);
那这样我还是没有找到委托绑定事件的元素啊
天际的海浪 2020-06-19
  • 打赏
  • 举报
回复
加个判断条件 return tf.selector && $(tf.selector,t).is(ele);
天际的海浪 2020-06-18
  • 打赏
  • 举报
回复
如果是委托绑定的就要在所有祖先元素中遍历判断

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"));
本人QQ-554433626 2020-06-18
  • 打赏
  • 举报
回复
引用 1 楼 chinaskysun 的回复:
window.document.body.addEventListener("onclick",function(){console.log("click0")})
$("body").click(function(){
	console.log("click1");
});
console.log($._data($("body")[0]));
不得行,undefined
天际的海浪 2020-06-18
  • 打赏
  • 举报
回复
jquery 1.8之后的判断元素是否绑定事件的方法 console.log("click" in $._data($("#id")[0],"events"));
chinaskysun 2020-06-18
  • 打赏
  • 举报
回复
你截图最后一行不是有结果吗? 没有绑定事件怎么会有? 你就拿我的代码运行一下,看看不行吗?真是服了你了
本人QQ-554433626 2020-06-18
  • 打赏
  • 举报
回复
引用 4 楼 chinaskysun 的回复:
你看看我的代码能不能正常运行? 我看你是写错了,在我的基础上改吧。 $._data()返回的是对象,不是数组,没有[0],你把[0]写小括号里面看看
你这个语法跟$.data(ele, 'events') || $._data(ele, 'events');其实是一样的,委托的拿不到事件。
chinaskysun 2020-06-18
  • 打赏
  • 举报
回复
你看看我的代码能不能正常运行? 我看你是写错了,在我的基础上改吧。 $._data()返回的是对象,不是数组,没有[0],你把[0]写小括号里面看看
chinaskysun 2020-06-17
  • 打赏
  • 举报
回复
window.document.body.addEventListener("onclick",function(){console.log("click0")})
$("body").click(function(){
	console.log("click1");
});
console.log($._data($("body")[0]));

87,997

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧