javascript - Chrome 中光标位置异常位于输入值的末尾

标签 javascript jquery google-chrome

我编写了一个 jQuery 函数,以便在将文本写入输入框中时自动删除单引号和双引号。在 Firefox 中一切顺利,但在 Chrome 中,如果你想在文本开头添加一些内容,这是不允许的。因为光标始终位于输入值的末尾。我不知道如何解决它。这是我的代码:

$.fn.removeQuotes = function()
{
    var elem = $(this);
    elem.bind("focus propertychange change click keyup input paste", function(event)
    {
        setTimeout(function ()
        {
            elem.val(elem.val().replace(/['"]/g, ""));
        }, 1);
   });
};

编辑:评论后,我尝试了以下操作:

$.fn.removeQuotes = function()
{
    var elem = $(this);
    elem.bind("focus propertychange change click keyup input paste", function(event)
    {
        // store current positions in variables
        var start = this.selectionStart,
        end = this.selectionEnd;
        setTimeout(function ()
        {
            elem.val(elem.val().replace(/['"]/g, ""));
        }, 1);
       // restore from variables...
       this.setSelectionRange(start, end);
   });
};

但是什么都没有改变。

最佳答案

这是一个粗略版本供您构建 - https://jsfiddle.net/Sanjeevi/79gun3g0/1/

    <div>
      <input id="text-box" type="text">
    </div>

$.fn.removeQuotes = function()
{
    var elem = $(this);
    elem.bind("keyup", function(event)
    {
                var start = elem.caret();
            console.log(start);
            elem.val(elem.val().replace(/['"]/g, ""));
            setCaretPosition('text-box',start);
   });
};

function setCaretPosition(elemId, caretPos) {
    var elem = document.getElementById(elemId);

    if(elem != null) {
        if(elem.createTextRange) {
            var range = elem.createTextRange();
            range.move('character', caretPos);
            range.select();
        }
        else {
            if(elem.selectionStart) {
                elem.focus();
                elem.setSelectionRange(caretPos, caretPos);
            }
            else
                elem.focus();
        }
    }
}

$(document).ready(function(){
    $("#text-box").removeQuotes();
});

关于javascript - Chrome 中光标位置异常位于输入值的末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36733218/

相关文章:

javascript - tinyMCE 不添加特定文本区域的控件

javascript - 单击按钮时如何显示从特定 API 新随机生成的报价?

javascript - 有没有办法动态加载本地JS文件?

javascript - chrome 网络检查器中的黄色警告图标是什么意思?

javascript - 使用 Chrome 扩展程序停止执行函数

javascript - 使用 Javascript/jquery 更改 CSS 属性

javascript - 如何在 Nativescript 和纯 JS 中禁用 iOS 缩放和双击缩放

javascript - Jquery - 图像未在第一次点击时加载

javascript - 在 jQuery 中单击后检索表格单元格的文本

javascript - 更改正文中所有文本元素的字体大小