在输入时检查INSERT模式是否为ON

Check if INSERT mode is ON when typing in an input

本文关键字:是否 ON 模式 INSERT 输入 检查      更新时间:2023-09-26

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

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

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

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

任何解决方案,或者用Barney Stinson的话来说,";骗局、骗局、喧嚣、欺骗、赌博、虚张声势、阴谋和欺骗"如果能帮助我,我将不胜感激。

仅适用于IE:

document.queryCommandValue("OverWrite");

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

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

虽然我认为您不能直接访问用户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(从这里借用),因为例如,您不想对按下的shift键执行检查。

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

我确信你可以做更深入的检查,但希望这能有所帮助!