Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 更改输入值,同时仍允许用户键入_Javascript_Jquery_Html_Input - Fatal编程技术网

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

Javascript 更改输入值,同时仍允许用户键入,javascript,jquery,html,input,Javascript,Jquery,Html,Input,在用户键入时,是否可以使用JavaScript或jQuery更改文本输入字段的内容 例如,键入a+up会将a更改为å,同时将输入光标保持在相同的位置。是的,动态更改,并将选择开始和选择结束保持在上一个位置: selectionStart和selectionEnd表示选择边界,在没有选择的情况下它们彼此相等,在这种情况下它们表示光标位置 Edit:决定为它制作一个jQuery插件,因为它以后可能会派上用场,而且这样在任何地方都很容易实现 (function($) { var down

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


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

是的,动态更改,并将
选择开始
选择结束
保持在上一个位置:

selectionStart
selectionEnd
表示选择边界,在没有选择的情况下它们彼此相等,在这种情况下它们表示光标位置

Edit:决定为它制作一个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);

我曾经做过类似的事情。我认为这要简单得多。修改它以满足您的需要:

$("input#s").keyup(function(e) {
    var m=$("input#s");
    var value= m.val();
    var pos = m.prop('selectionStart');
    value=value.replace(">","»");
    m.val(value);
    m.prop({'selectionStart':pos,'selectionEnd':pos});
});

@JJ56:干杯,忘了提一下(据我所知)IE8-不支持这个。