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

2023-11-23

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

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

<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>

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

contenteditable div 中子元素的键盘事件? 的相关文章

  • 如何在osx中​​创建虚拟键盘?

    我想在 osx 中创建一个虚拟键盘 是否可以 我的意思是我可以制作一个程序来提供与真实键盘相同的信号吗 这种键盘的示例是屏幕键盘或键盘查看器 顺便说一句 它是否有必要的界面 我应该从多低开始 我应该制作一个设备驱动程序吗 虚拟 无线 键盘
  • Linux下删除/重写/生成键盘事件

    我想在 Linux 下挂钩 拦截和生成键盘 make break 事件 然后再将它们传递给任何应用程序 更准确地说 我想检测关键事件流中的模式 并能够根据检测到的模式丢弃 插入事件到流中 我在 SO 上看到了一些相关问题 但是 它们要么只处
  • 角度和内容可编辑

    我在网上搜索过但找不到使用的方法contenteditableAngular 6 7 上的活动 Angular 似乎有一个混乱的解决方案 但该功能似乎并未延续到最新版本 一个用例是内容可编辑onChange事件 调用函数 div Type
  • Javascript - 获取任何键盘布局的按键描述

    For a rich web application I need keyboard shortcuts Because there are many different keyboard layouts they have to be c
  • 获取任何 QKeyEvent 键值的可打印名称

    我正在使用 PyQt5 当我编写 keyPressEvent 处理程序时 我希望能够出于调试目的打印人类可读的关于按下了哪些键的描述 无论如何 我希望能够打印这样的东西 无论事件中按下了多少个键 或者它们是修饰键还是 常规 键 我见过上一个
  • 确定Linux键盘事件设备

    这另一个问题 从 Linux 输入设备访问按键 https stackoverflow com questions 20943322 accessing keys from linux input device 提供了有关如何在没有按下其他
  • 在 CTRL+MOUSEWHEEL 事件上

    我被要求为我们的页面站点实现 ctrl mousewheel 事件 以便更改用户放大或缩小时的图像偏移 我找到了这个旧答案使用 javascript 覆盖浏览器 CTRL WHEEL SCROLL https stackoverflow c
  • 带有可编辑文本字段的全高流体布局

    我多年来一直在思考这个谜题 我不敢相信这么简单的布局不能用简单的 html css 来解决 所以周末我会把这个交给你 期望的结果 心理模型 notepad exe height depends on static content This
  • contentEditable 不会将第一行换行到标签中

    我有一个带有 contentEditable 属性集的 div 我遇到的问题是我输入的第一行没有包含在标签中 但后续行却包含在标签中 所以输入 qwerty zxcv asdfg 结果是 div class editable qwerty
  • 无法中断 lock.acquire() 而我可以中断 time.sleep()

    在 Windows 中 Python 3 4 import threading l threading Lock l acquire l acquire 触发死锁 并且 CTRL C 无法阻止它 你必须杀死该进程 另一方面 import t
  • 当 contenteditable 中有多行时,替换光标前的单词

    我想替换光标之前的单词contenteditablediv 另见在文本区域或 contenteditable div 中键入 TAB 时检测最后写入的单词 https stackoverflow com questions 50794324
  • Fabric.js画布监听键盘事件?

    在我的结构应用程序中 我当前正在侦听某些按键 例如删除键 并删除任何选定的元素 我监听按键的方法是 document onkeydown function e if 46 e keyCode 46 is Delete key do stuf
  • 当插入符进入 contenteditable div 中的 span 元素时触发事件

    我有一个内容可编辑的 div 其跨度如下 div some span spanned span text div 我想知道是否有任何事件监听器可以附加到span元素本身可用于检测插入符是否在元素内部移动span元素 我并不是在寻找有听众的答
  • 在 Firefox 中读取多行内容可编辑文本

    让我们读取一个 contenteditable 元素 span This is editable br Yes it is span 就在您在文本末尾手动添加两个空格之后 I get textContent gt This is edita
  • 在没有窗口焦点的情况下检测 Windows 上的按键 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我一直在网上搜索 但 Google 上的所有热门结果都只将我引向 Java 这令人沮丧 我想做的是 制作一个监听键盘事件的程序 而不是
  • 使用 Javascript 跨浏览器处理“Enter”键按下

    我有以下示例 可以轻松检测到 Enter 键按下并正确处理它 这里是
  • 如何使用adb shell输入来输入&符号?

    adb shell input text 不起作用 也不行adb shell input keyevent KEYCODE AMPERSAND 相关问题 7789826 https stackoverflow com questions 7
  • 两个连续 KeyDown 事件之间的延迟较长

    我正在编写一个小游戏引擎 纯粹是为了从内部了解它们是如何工作的 我目前不想搞乱 OpenGL 或 DirectX 所以我坚持使用 GDI 和所有 WinForms 东西在控件上绘图 显然 我需要处理输入 更具体地说 是键盘事件 然而 这带来
  • Contenteditable 显示最后插入的 html 元素

    我使用 contenteditable div 作为输入字段来输入一些文本 并通过该文本中的按钮 小 html 图片 插入图标 只要文本比 contenteditable 字段窄 就可以了 一旦文本比字段长 因此它被部分隐藏 当我输入文本字
  • Contenteditable - 从插入符号提取文本到元素末尾

    浏览完所有可能的问题和答案后 我会尝试这种方式 我正在编写 RTE 程序 但未能成功提取 contenteditable 元素中的文本 原因是 每个浏览器处理节点和按键 13 事件的方式略有不同 例如 一个浏览器创建 br 另一个浏览器创建

随机推荐

  • 在 iOS 应用程序中实施 OAuth 1.0

    我一整天都在为这件事伤透了脑筋 我希望将我的 iOS 应用程序与 Withings api 集成 它使用 OAuth 1 0 我似乎无法完全理解如何实现它 我一直在下载多个 OAuth 框架 MPOAuth gtm oauth ssoaut
  • JavaScript 表操作

    我有一张包含一列和大约十行的表格 第一列包含以文本作为行标题的行 标题 1 标题 2 第二列包含供用户输入数据的字段 文本框 and 复选框 我想在顶部有一个标记为 的按钮添新 并让它创建第三列 其字段与第一列相同 如果用户再次单击它 它将
  • 在 bash 中并行设置变量

    这是一个示例程序 bin bash for x in 1 5 do output x echo x done wait for x in 1 5 do echo output x done 我希望它能够运行并打印出分配给每个成员的值outp
  • 将 Google 云客户端库添加到 Play 2.5 时出现 ChannelException

    这是一些堆栈跟踪 io netty channel ChannelException Unable to create Channel from class class io netty channel socket nio NioServ
  • 使用 JSON 绘制 google 图表

    如果它是一个单独的 JSON 文件 我如何检索和使用 google 图表的数据集 我尝试了 jQuery getJSON 但无法让它工作 Google Viz 应该使用 JSON 来绘制条形图 有没有原生的谷歌API方式 或者我可以找到一种
  • Xcode NSManagedObject 子类在标记为非可选时包含选项

    我有一个名为 Film 的核心数据实体 它具有属性标题和日期 我注意到生成的 NSManagedObject 子类包含可选的 NSManaged 属性 即使我在核心数据检查器中将这些属性标记为非可选 我可以手动将其更改为非可选属性 还是将其
  • 错误:GooglePlayServicesClient 包不存在

    我已经使用 android studio 添加了登录活动到我的应用程序 但是我遇到了这些错误 Error 11 37 error cannot find symbol class GooglePlayServicesClient Error
  • 为什么我的原始类型参数方法不覆盖包装器类型参数超类方法?

    public class WrapperClasses void overloadedMethod Number N System out println Number Class Type void overloadedMethod Do
  • IOS 构建中的重复符号

    我正在尝试在 IOS 上运行我的 Flutter 应用程序 在 Android 上它可以正常工作 但是当我尝试运行它时出现以下错误 Launching lib main dart on iPhone 11 Pro Max in debug
  • CVOpenGLESTextureCacheCreateTextureFromImage 返回 -6683(kCVReturnPixelBufferNotOpenGLCompatible)

    我已经从视频帧中分别 提取 Y U V 数据并将它们保存在data 0 data 1 data 2 框架尺寸为640 480 现在我创建了pixelBuffer如下 void pYUV 3 data 0 data 1 data 2 size
  • 在 Visual Studio 2013 中创建应用程序设置

    我已经有一个准备构建的项目 目前 我使用的是 Visual Studio 2013 但是 我不知道如何在 Visual Studio 2013 中创建 MSI 设置 但对于 Visual Studio 2010 有很多教程讨论如何在 Vis
  • 如何在使用@Parcelize时对数据类中除构造函数之外的成员变量进行分割

    我正在使用 Room 和 Kotlin 数据类 例如 Entity tableName Person Parcelize class Test ColumnInfo name name var name String Parcelable
  • T(n)=T(n-1)+1/n 的渐近复杂度 [关闭]

    Closed 这个问题是无关 目前不接受答案 有一种算法 其时间复杂度为 T n T n 1 1 n if n gt 1 1 otherwise 我正在求解其渐近复杂性 并得到顺序为 n 但给出的答案是 log n 这是对的吗 如果是log
  • 如何访问Delphi中的基(超)类?

    在 C 中 我可以通过以下方式访问基类base关键字 在java中我可以通过以下方式访问它super关键词 在delphi中如何做到这一点 假设我有以下代码 type TForm3 class TForm private procedure
  • 如何以编程方式检测 iPhone 6 和 6 Plus 查看模式[重复]

    这个问题在这里已经有答案了 有没有办法以编程方式识别视图模式 在设置 gt 显示和亮度中 许多应用程序设计在标准模式和缩放模式下的行为有所不同 请参考图片 任何帮助 将不胜感激 您可以使用 UIScreen mainScreen nativ
  • React 组件未显示在匹配的路由上(react-router-dom)

    大家好 我不知道发生了什么事 我有以下路线
  • 使用 Curl 和 Oauth 2 将文件上传到 DropBox 的 DropBox API PUT 示例

    我正在到处搜索 但无法找到合适的示例 而且我不够精通 无法通过文档对其进行排序 比我更有知识的人可以告诉我如何为 OAUTH 2 形成 CURL 命令吗 我只需要 OAUTH 2 密钥吗 我正在显示一个应用程序密钥 应用程序秘密和 oaut
  • PDO:MySQL 服务器已消失

    我有一个脚本 每晚都要进行大量的跑腿工作 它使用在循环中执行的 PDO 准备语句 前几个运行良好 但后来我发现它们都失败并出现错误 MySQL 服务器已经消失 我们运行 MySQL 5 0 77 PHP 版本 5 2 12 网站的其余部分运
  • 斜边按钮

    我正在尝试构建如下所示的按钮 我可以使用以下方法完成此操作 after and CSS 三角形 但我无法使用可变高度元素 有什么方法可以实现这一点并保持可变高度吗 Fiddle http jsfiddle net AaP47 2 在这种情况
  • contenteditable div 中子元素的键盘事件?

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