【发布时间】:2013-05-26 21:04:39
【问题描述】:
我正在尝试对同一页面上的不同表单使用事件委托。但是,我在尝试提交表单时遇到了一个有趣的问题。
我尝试在一个表单(用于提交按钮)上“单击”,完全清楚事件委托固有地在整个表单上设置“单击”。
然而,问题在于“点击”事件实际上是在整个页面上设置的,而不仅仅是表单或按钮元素。所以无论我点击页面,都会触发表单的“点击”事件。所有浏览器都会发生这种情况。
'change' 事件也发生了同样的事情。当我在表单上设置“更改”事件时,表单的子字段和特定表单节点之外的其他字段都会触发它。
所以虽然我知道之前有 questions 询问过事件委托,但他们并没有真正回答这个问题。这甚至是一个问题吗?也许这就是事件委托的工作方式?但是如果是这样的话,那么为整个文档触发事件不是浪费内存吗?解决办法是什么?
另外,有没有一种跨浏览器的方法来阻止纯 Javascript 中的传播?我找到的最好的是Quirksmode.org:
function doSomething(e)
{
if (!e) var e = window.event;
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
}
我知道我可以在触发时按类型过滤事件,但这是唯一可以做的吗?请帮助我理解这一点!
编辑:
具体问题是,将事件委托给表单以处理其特定字段上的事件是否会/也可以触发文档其余部分的事件?如果是这样,如何处理? 如果这不是事件委托的预期行为,那么可能是什么原因造成的?
【问题讨论】:
-
tl;博士。你应该更准确和简洁 - 你的问题是什么?
-
刚刚添加了一个具体问题。 :)
-
嗯...现在我不明白你的问题,但也许其他人会:)
标签: javascript events event-handling dom-events event-delegation