我可以让事件在发起者和后代之间传播吗?

Posted

技术标签:

【中文标题】我可以让事件在发起者和后代之间传播吗?【英文标题】:Can I make events propagate between originator and descendants? 【发布时间】:2015-04-25 04:35:34 【问题描述】:

我知道如果我有一个元素触发一个事件,它会向上传播到根,然后返回到原始元素。基本上,所有祖先都会收到通知。但我想通知所有的后代。我可以这样做吗?

谢谢,瑞克

【问题讨论】:

不是这样设计的,但可能有解决方法。你有具体的例子吗? 主要用于布局。如果有人调整外部 div 的大小,我希望所有子 div 都知道他们有更多或更少的空间。 对我来说,这听起来像是 CSS 的工作。 是的,你可以。你能提供一个你可能会使用它的代码示例吗? 我正在使用 jquery ui 的可调整大小的“小部件”(行为)来移动窗扇并调整面板的大小。 div 包含两个面板。当我使可调整大小的面板变大时,另一个面板自然会变小。我想告诉它的孩子,他们可能需要重新安排自己。今晚我会试着做一个 jsfiddle。 【参考方案1】:

这是可能的,我的代码可能有一些错误,但这里是:

elem = document.querySelectorAll('#my-element')[0];

function callClickOnDescendants(element, event)
  for (var i = 0, len = element.children.length; i < len; i++)
    element.children[i].onclick.call(element.children[i], event);
    callClickOnDescendants(element.children[i], event);
  


elem.onclick = function(event)
  callClickOnDescendants(elem, event);

如果您在投票前等待,我将能够在 jsfiddle 中进行测试。 编辑 它有效,jsfiddle proof

【讨论】:

嗨,古斯蒂。我想我明白了。我可以自己为每个孩子调用事件处理程序。我看到你是如何递归地沿着树向下走的。谢谢!我想我可以用这个。

以上是关于我可以让事件在发起者和后代之间传播吗?的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript事件冒泡和事件捕获

JS中的事件传播流程

事件的冒泡和捕获

阻止默认事件,事件委托和周期

angularjs中的事件传播$emit,$broadcast,$on

tenth week