Изменение входного значения, в то же время позволяя пользователю печатать - PullRequest
3 голосов
/ 28 августа 2011

Возможно ли с помощью JavaScript или jQuery изменить содержимое поля ввода текста, когда пользователь вводит текст?

например. ввод a + up изменит a на å, сохраняя курсор ввода в той же позиции.

Ответы [ 2 ]

4 голосов
/ 28 августа 2011

Да, измените его на лету и сохраните selectionStart и selectionEnd в предыдущей позиции: http://jsfiddle.net/pimvdb/p2jL3/3/.

selectionStart и selectionEnd представляют границы выбора и равны каждомудругие, когда выбора нет, и в этом случае они представляют позицию курсора.

Редактировать: Решено сделать из него плагин 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);
0 голосов
/ 22 апреля 2013

Мне когда-то приходилось делать подобное.Я думаю, что это намного проще.Измените его в соответствии с вашими потребностями:

$("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});
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...