因此,我希望能够找出页面的哪一部分已被单击。 不能一开始就保证所有元素都在页面上,这意味着我需要使用jquery委托之类的东西。
一种方法是遍历DOM中的所有元素,然后将事件处理程序附加到每个元素-但这将很慢且很复杂-每当动态添加新的html时,我要么必须重新附加所有处理程序,或找出添加的html的子集。
另一种方法是使用事件冒泡-因此将事件处理程序添加到文档或正文中,并依赖于事件冒泡
像这样的东西
$('body').delegate('div', 'click', function(e){
dummyId++;
console.log(e);
console.log(e.currentTarget);
console.log("=====");
});
但是,使用此代码后,当我单击页面上的按钮时,将得到按钮周围的div,而不是实际的按钮。 换句话说,以上内容过于具体。 此外,我觉得原始选择器应该是文档,而不是body标签。
明确地说,我想知道何时在页面上单击了任何元素-我该怎么做?
谢谢
所以我用.on尝试了这段代码
$(document).on('click', function(e){
console.log("EVENT DUMMY ID");
console.log(e.target);
console.log("=====");
});
但是,当我单击应用程序中的按钮时,不会触发任何操作-单击其他元素时,控制台日志会运行。
我知道如果没有更多背景信息,这可能很难回答-您还需要什么?
currentTarget
返回事件冒泡到的节点(如果有的话)。 而是询问target
,所以:
香草:
document.addEventListener('click', function(evt) {
alert(evt.target.tagName);
}, false);
jQuery的:
$(document).on('click', function(evt) {
alert(evt.target.tagName);
});
尝试这个:
$(document).on('click', function(e) {
// now use e.target here
});
您还可以使用e.stopPropagation()
click事件的冒泡
尽管我的建议确实依赖MutationEvents,但我认为无需替换,但我认为不需要使用jQuery这样的东西。
您可以在将任何新节点插入DOM时得到通知。 在触发的回调中,您可以将onclick处理程序附加到新节点上。 我只处理了添加新节点的情况。
<!DOCTYPE html>
<html>
<head>
<script>
window.addEventListener('load', onDocLoaded, false);
function onDocLoaded()
{
window.addEventListener('DOMNodeInserted', onNodeInserted, false);
document.body.appendChild( newEl('div') );
}
function onNodeInserted(evt)
{
evt.srcElement.addEventListener('click', onNodeClicked, false);
}
function onNodeClicked()
{
document.body.appendChild( newEl('div') );
}
</script>
<style>
div
{
border: solid 1px red;
padding: 8px;
margin: 4px;
display: inline-block;
}
</style>
</head>
<body>
</body>
</html>