javascript - 更改输入值,同时仍允许用户键入

标签 javascript jquery html input

是否可以使用 JavaScript 或 jQuery 在用户键入时更改文本输入字段的内容?

例如输入 a + up 会将 a 更改为 å,同时将输入光标保持在同一位置。

最佳答案

是的,即时更改它并保持 selectionStartselectionEnd 在以前的位置:http://jsfiddle.net/pimvdb/p2jL3/3/ .

selectionStartselectionEnd 表示选择范围,当没有选择时它们是相等的,此时它们表示光标位置。

编辑:决定为它制作一个 jQuery 插件,因为它以后可能会派上用场,而且很容易以这种方式在任何地方实现。

(function($) {
    var down         = {}; // keys that are currently pressed down
        replacements = { // replacement maps
            37: { // left
                'a': 'ã'
            },

            38: { // up
                'a': 'â'
            },

            39: { // right
                'a': 'á'
            },

            40: { // down
                'a': 'à'
            }
        };

    $.fn.specialChars = function() {
        return this.keydown(function(e) {
            down[e.keyCode] = true; // this key is now down

            if(down[37] || down[38] || down[39] || down[40]) { // if an arrow key is down
                var value   = $(this).val(),                         // textbox value
                    pos     = $(this).prop('selectionStart'),        // cursor position
                    char    = value.charAt(pos - 1),                 // old character
                    replace = replacements[e.keyCode][char] || char; // new character if available

                $(this).val(value.substring(0, pos - 1) // set text to: text before character
                            + replace                   // + new character
                            + value.substring(pos))     // + text after cursor

                      .prop({selectionStart: pos,   // reset cursor position
                             selectionEnd:   pos});

                return false; // prevent going to start/end of textbox
            }
        }).keyup(function(e) {
            down[e.keyCode] = false; // this key is now not down anymore
        }).blur(function() {
            down = {}; // all keys are not down in the textbox when it loses focus
        });
    };
})(jQuery);

关于javascript - 更改输入值,同时仍允许用户键入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7217176/

相关文章:

javascript - HTML 模板呈现 - 奇怪的行为

javascript - Javascript For 循环上的意外 token 非法

javascript - 在 Tabletools 中打开或保存提示

JQuery 验证奇怪的自定义方法错误

html - 使用后选择器类更改悬停按钮的文本颜色

javascript - 水平 CSS 或 Javascript "help scrolling",使其元素保持全宽

javascript - 无法使用键盘选择 Bootstrap 下拉列表的元素

javascript - trim 长导航,如果它离开屏幕

html - CSS3 Hover 不适用于更改 Button 图像

javascript - 使用 accept 捕获的 Polyfill 文件输入(使用 getUserMedia 捕获?)