Javascript 检测父级为contenteditable div的contenteditable子级的密钥更新事件

Javascript 检测父级为contenteditable div的contenteditable子级的密钥更新事件,javascript,jquery,html,contenteditable,Javascript,Jquery,Html,Contenteditable,目标:将keydown事件处理程序附加到contenteditable跨度,该跨度是contenteditable div的子级 问题:如果键入范围,则会触发父事件,而不是子事件。我想要的是孩子触发,这样我就可以抓取文本。我只想要那个孩子,因为会有很多 HTML/JS如下,fiddle链接如下: HTML **注意:事件处理委托给文档,因为元素是动态添加的。所以这是一个bug。已确认FF23和CHROME29的解决方案(在没有虚拟机的linux上,因此无法测试IE)。必须将换行范围设置为con

目标:将keydown事件处理程序附加到contenteditable跨度,该跨度是contenteditable div的子级

问题:如果键入范围,则会触发父事件,而不是子事件。我想要的是孩子触发,这样我就可以抓取文本。我只想要那个孩子,因为会有很多

HTML/JS如下,fiddle链接如下:


HTML
**注意:事件处理委托给文档,因为元素是动态添加的。

所以这是一个bug。已确认FF23和CHROME29的解决方案(在没有虚拟机的linux上,因此无法测试IE)。必须将换行范围设置为contenteditable false,不能忽略声明contenteditable属性,这是一个错误。溶液通过

这是小提琴:

HTML
回顾一下这个(可能是你想要的):我刚刚发现了这个我认为更相关的:,看起来像是一个黑客的想法。。。我认为这是一个bug。我不同意这是一个bug:关键事件只在能够接收焦点的元素上触发,其中包括输入和内容可编辑元素。contenteditable元素中的元素不符合条件。无论如何,您可以从浏览器的选择对象推断包含插入符号的元素。它不是非序列。我承认我没有很详细地定义我的术语(像这样,这就是我的意思),但我希望我的观点是清楚的。可以接收焦点的元素可以触发关键事件。contenteditable元素中的元素如果没有任何介于contenteditable=“false”之间的元素,则无法接收焦点,因此不会生成关键事件。此答案存在文本选择问题。我无法连续选择父文本和子文本。
<div class="parent" contenteditable="true">
    Parent div text.

    <span class="child" contenteditable="true">First child span text.</span>
    <span class="child" contenteditable="true">Second child span text.</span>
    <span class="child" contenteditable="true">Third child span text.</span>
</div>

<div id="console"></div>
$(document).on( 'keyup', '.parent', function() {
    $('#console').html( 'Parent keyup event fired.' );
    //do stuff
});

$(document).on( 'keyup', '.child', function() {
    $('#console').html( 'Child keyup event fired.' );
    //do stuff
});
<div class="parent" contenteditable="true">
    Parent div text.

    <span contenteditable="false">
        <span class="child" contenteditable="true">First child span text.</span>
    <span contenteditable="false">
        <span class="child" contenteditable="true">Second child span text.</span>
    </span>
</div>

<div id="console"></div>
$(document).on( 'keyup', '.parent', function() {
    //do stuff
    $('#console').html( 'Parent keyup event fired.' );
});

$(document).on( 'keyup', '.child', function(e) {
    //do stuff
    $('#console').html( 'Child keyup event fired.' );
    e.stopPropagation();
});