【问题标题】:Check if INSERT mode is ON when typing in an input输入输入时检查 INSERT 模式是否打开
【发布时间】:2013-08-17 01:03:23
【问题描述】:

我正在尝试计算各种事件的输入字段的值,而不管捕获的事件如何。

我正在考虑keypress keyup keydown cut paste 事件(我忘记了什么吗?)。

我正在尝试确定文本输入 INSERT 模式是开启(默认 - 开启)还是关闭。我无法通过捕获该键的键事件来确定模式,尽管我不知道初始状态是什么。

有人知道方法吗?最好是跨浏览器解决方案,包括 IE8+、Chrome 和 Firefox。

任何可以帮助我的解决方案,或者用 Barney Stinson 的话来说,“骗局、骗局、骗局、欺骗、开局、骗局、计谋和欺骗”都将不胜感激。

【问题讨论】:

  • 每次读取整个值不是更容易吗?
  • 对于所有这些事件,除了keyup,输入的值直到事件处理之后才会刷新。
  • 啊,明白了。是的,我很确定 DOM 不会在任何地方暴露 insert mode 状态。
  • 我找不到任何参考,这就是我在这里问的原因:)
  • @EXSlaver 抱歉还没有 - 看到 this,它仅适用于 IE,但它用于设置插入模式 - 尚未找到用于检查当前状态的等效项。

标签: javascript keyboard dom-events


【解决方案1】:

仅适用于 IE:

document.queryCommandValue("OverWrite");

据我所知,Firefox 和 Chrome 没有覆盖模式。插入键在这些浏览器中不起作用,它们始终处于插入模式

此外,Mac 键盘从一开始就没有 insert 键。因此 Safari 也始终处于 插入模式

【讨论】:

  • 这是我问题的完整答案。
  • 这个答案并不完全正确 - 不幸的是,Windows 上的 Chrome 在 contenteditable 元素中仍然具有覆盖模式。在表单元素(输入、文本区域)中没有覆盖模式。在带有 Crome 41 的 Windows 7 上测试。jsfiddle.net/sw077y41
  • 对于 IE11,document.queryCommandValue("OverWrite");总是给我假
【解决方案2】:

虽然我不认为您可以直接访问用户Insert 状态的状态,但您可以弄清楚用户在编辑字段时字符串的长度。

考虑一下,用一个简单的<input id="input" />

var i = document.getElementById('input');

document.onkeydown = function(e) {
    var c = String.fromCharCode(event.keyCode);

    if(null !== c.match(/\w/)) {
        l = i.value.length;
    }
}

document.onkeyup = function(e) {
    var c = String.fromCharCode(event.keyCode);

    if(null !== c.match(/\w/)) {
        if(l === i.value.length) {
            console.log("Keyboard insert might be off - length hasn't changed");
        }
    }
}

请注意,有一个基本检查可以尝试隔离字母和数字(使用matchkeyCode(借用from here),因为您不想这样做例如,检查是否按下了 shift 键。

此处为基本 POC:http://jsfiddle.net/Xp3Jh/

我确信您可以进行更深入的检查,但希望这会有所帮助!

【讨论】:

  • 这不是我想要的,虽然我试图在我选择的任何事件中获得价值,但这仍然是一个很好的详细答案。此代码不适用于长按键,但要点很清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-05
  • 2021-09-29
  • 2018-05-26
  • 2017-08-04
  • 1970-01-01
  • 1970-01-01
  • 2011-08-18
相关资源
最近更新 更多