嵌套的Web组件和事件传播

时间:2017-09-07 19:36:05

标签: javascript web-component

我有两个网络组件。首先是输入字段。第二个是带按钮的表格。我的页面只是将输入Web组件放入表单Web组件中。

输入Web组件管理模糊事件以进行一些验证。如果出现错误,此验证会将一些元素添加到DOM中。 表单Web组件管理按钮上的单击事件以执行某些操作。

如果焦点在输入中并且我单击按钮,则会触发blur事件,但不会触发click事件。 如果我删除了将一些元素添加到DOM中的代码(在blur事件中),则会触发这两个事件!

这是一个小提琴来证明:https://jsfiddle.net/2guc1rkj/

  1. 打开控制台
  2. 将焦点放在输入上,然后点击按钮 - >控制台显示'模糊'
  3. 评论第32行(parent.appendChild(content);),运行Fiddle,将焦点放在输入上并单击按钮 - >控制台显示屏' Blur'和'点击' !
  4. 评论专栏:

    parent.appendChild(content);
    

    当我的模糊事件对DOM进行一些修改时,为什么我的点击事件无效?

1 个答案:

答案 0 :(得分:2)

当您拥有附加内容的代码时,点击事件不会触发的原因是因为附加内容会移动按钮。事件按顺序触发,因此它首先触发模糊,然后添加内容,向下移动按钮,然后单击按钮不会发生,因为按钮不再接收点击。

当您对parent.appendChild发表评论时,该按钮不会移动,因此它会保留在原位。

您可以通过简单地移动上方没有移动的按钮来确认这一点,并且不会被您要追加的元素移动。

https://jsfiddle.net/augburto/2guc1rkj/1/