当前位置: 首页 > 面试题库 >

在自定义输入字段中输入数据

终子昂
2023-03-14
问题内容

我的扩展程序具有一个包含项目的上下文菜单。我想要做的是:右键单击editablehtml元素(例如,输入或文本区域),然后选择并单击菜单中的某个项目时-
由扩展名定义的某些值将输入到输入中。

目前,我已经意识到document.activeElement.value = myValue
简单的输入就可以了。

当存在具有自定义onChange事件处理的输入(例如日历或电话输入或货币输入)时,问题就开始了,这些输入以某种方式转换了用户输入。
由于我直接在元素上设置了一个值-省略了处理逻辑,这会引起各种问题。

由于javascript不允许使用类似KeySend的功能-我在这里有哪些选择?

我曾经考虑过使用Puppeteer或Cypress之类的测试工具-
但它们似乎都无法打包到扩展中。Puppeteer确实具有这样的选项,但是仍然需要运行一个节点实例才能连接。而且,我希望自己的扩展程序完全是客户端程序,并在Chrome网络商店中分发-
因此,我不能要求我的用户运行启动节点服务器。


问题答案:

有一个内置的DOM方法document.execCommand。 如果是扩展名,请在内容脚本中使用此代码。

document.querySelector('some.selector').focus();
document.execCommand('insertText', false, 'new text')

它会将物理用户输入模拟
为当前关注的DOM元素,因此将在字段设置为true的情况下触发所有必需的事件(如beforeinput,,input因此,change如果适用)isTrusted

您可能希望选择当前文本以完全替换它,而不是附加:

replaceValue('some.selector', 'new text');

function replaceValue(selector, value) {
  const el = document.querySelector(selector);
  if (el) {
    el.focus();
    el.select();
    document.execCommand('insertText', false, value);
  }
  return el;
}

请注意,execCommand在2020年被标记为已过时,但是它将在可预见的将来工作,因为新的编辑API规范尚未完成,并且知道此类操作通常需要多长时间才能完成。



 类似资料:
  • 问题内容: 我正在尝试我的React.js的第一部分,并在很早的时候就陷入了困境…我有下面的代码,该代码将搜索表单呈现为。但是,在搜索框中输入内容无济于事。 大概在通过道具并上下移动时会丢失一些东西,这似乎是一个常见问题。但是我很沮丧-我看不到缺少的东西。 (最终,我会使用其他类型的,但是我只是想让这一类正常工作。) 问题答案: 您尚未将道具放在机箱中。它必须在JSX中。 在文档中充分考虑了将 p

  • 我有一个输入字段,用户只能在其中输入数字。 JSFIDLE演示 问题是:当我输入一个数字(例如,)然后按点()时,或-浏览器会自动删除输入字段的内容(值设置为“”=空字符串)。但是为什么呢?将类型从更改为似乎可以解决问题。但是,我失去了输入字段的向上/向下箭头功能。有什么想法吗?

  • 我使用Spring Boot和Hibernate Envers自定义和来存储用户名、ip等附加信息。它工作正常。 作为一个新的需求,我还需要存储来自用户的修改注释。因此,如果用户更改了实体,他/她还需要输入此更改的原因。此文本应保存在其他修订信息中。 我的和类中都有文本,但是如何用这些信息填充?

  • 问题内容: 我有以下html5输入元素: 为什么此输入允许在输入字段中输入字符“ e”?没有其他字母字符可以输入(按预期方式) 使用chrome v.44.0.2403.107 问题答案: 因为这正是规范所说的应该工作的方式。输入的数字可以接受浮点数,包括负号和或字符(其中指数是或后面的数字): 浮点数按以下顺序由以下部分组成: 可选地,第一个字符可以是“ ”字符。 “ ” 范围内的一个或多个字符

  • 问题内容: 当输入零作为输入时,我需要停止询问整数输入,并立即开始求和。当我键入零时,我的程序不会停止。我需要它停止并开始汇总它收集的所有输入。 这是我所拥有的: ///////////////有效的最终代码。谢谢!公共类Inttosum { 问题答案: 您正在使用一种称为循环条件的东西,但是在循环中更新了变量。您可以使用循环。更改 像 使用 我也建议先打电话再打电话。而且,由于您不使用(只是),

  • 问题内容: 我试图在下面的字段中限制输入为数字 它不适用于 它适用于以下代码,但同时更改了两个字段 需要更改用户正在输入的输入字段的值,而不是两者都更改 问题答案: 使用此处找到的指令:而不是ng-change函数。复制此处以方便参考: