gpt4 book ai didi

keyboard-events - contenteditable div中子元素的键盘事件?

转载 作者:行者123 更新时间:2023-12-04 21:00:46 25 4
gpt4 key购买 nike

我有一个 div,其 contenteditable 属性已设置为 true。如何让 child 响应键盘事件?似乎唯一的方法是捕获父 div 中的事件并通过选择 api 找出 child 。有没有更好的办法?更具体地说,我可以将键盘事件处理程序附加到子元素吗?我错过了什么吗?

附件是说明问题的示例代码。希望代码中的注释具有足够的解释性。

<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>

<BODY>
<div id="editable" contentEditable='true' style='height: 130px; width: 400px; border-style:solid; border-width:1px'>
<span id="span1" onkeypress="alert('span1 keypress')">test text 1</span> <!-- does not work -->
<span id="span2" > test text2</span>
<span id="span3" onclick="alert('span3 clicked')">test text 3</span> <!-- this works fine -->
</div>
<!-- Uncomment this to set a keypress handler for span2 programatically. still doesnt work -->
<!--
<script type="text/javascript">
var span2 = document.getElementById('span2');
span2.onkeypress=function() {alert('keypressed on ='+this.id)};
</script>
-->

<!-- Uncomment this to enable keyboard events for the whole div. Finding the actual child that the event is happening on requires using the selection api -->
<!--
<script type="text/javascript">
var editable = document.getElementById('editable');
editable.onkeypress=function() {alert('key pressed on ='+this.id+';selnode='+getSelection().anchorNode.parentNode.id+',offset='+getSelection().getRangeAt(0).startOffset)};
</script>
-->
</BODY>
</HTML>

最佳答案

这是因为常规的跨度和 div 无法获得焦点。您可以通过添加 tabindex 使普通的 span 或 div 可聚焦。属性到标签,或使其可编辑。你不想要 tabindex在子跨度上,因为这似乎阻止它在 IE 中可编辑。我打算建议检查 target/srcElement Event 的属性传递给 keypress 的对象整个 div 的处理程序,但在 IE 中,这只会为您提供对同一个 div 而不是子跨度的引用。

因此,在回答您的问题时,我认为没有比使用选择来检查字符输入位置更好的跨浏览器解决方案。

关于keyboard-events - contenteditable div中子元素的键盘事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1033004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com