我试图使用“选择”功能进行扩展:让用户单击页面上的任何元素并查看它的xpath。如何使所有页面元素不会对点击产生反应
然而,使其可用我必须防止元素从点击反应:我不想点击超链接转发我到另一页,按钮提交表单,等等等等
我会怎么做?
UPD:我需要它仅适用于Chrome
我试图使用“选择”功能进行扩展:让用户单击页面上的任何元素并查看它的xpath。如何使所有页面元素不会对点击产生反应
然而,使其可用我必须防止元素从点击反应:我不想点击超链接转发我到另一页,按钮提交表单,等等等等
我会怎么做?
UPD:我需要它仅适用于Chrome
在我看来,最干净的方法是将一个事件处理程序绑定到body
在捕捉相和防止事件传播/默认行为。
你可以得到event.target
一个参考点击的元素:
document.body.addEventListener('click', function(event) {
event.preventDefault();
event.stopPropagation();
console.log(event.target);
}, true);
的优点是,此事件处理程序将是第一个被触发,无论哪个其他的事件处理程序绑定到元素该页面(除非页面绑定了一个类似的事件处理程序到body
,但通常事件处理程序绑定在冒泡阶段)。
欲了解更多信息,请参阅quirksmode.org - Event order和MDN - addEventListener
。
尽管这个解决方案是纯js而不是jQuery,但它似乎是jQuery方式中最相关和最容易重写的。谢谢。 – izhak
试试这个
$('body *').on('click',function(e){
return false;
});
对于一个CSS唯一的解决办法:
* {
pointer-events: none;
}
+1 Nice [tag:HTML5]解决方案 – mate64
'在非SVG元素的CSS中使用指针事件是实验性的。 ' –
问题是如果设置此规则,是否会触发扩展的事件处理程序。 –
在你click
事件处理程序,确保你要么调用preventDefault()
在事件对象,或从您的函数返回false
。例如:
function myClickHandler(e) {
e.preventDefault() // e is the event object
// Do your click stuff here
.
.
.
return false; // not required if you've called e.preventDefault()
}
您想支持哪些浏览器?您可以通过设置事件处理程序来轻松实现捕获阶段的侦听,但在IE8及更低版本中不支持。 –
@FelixKling我只需要支持Chrome – izhak