在文本框上按删除或退格键时删除已删除的字符或文本

时间:2013-06-09 02:23:55

标签: javascript events

我有一个文本框,当我按退格键或删除键时,我想获取已删除的字符。

我有一个密钥启动事件处理程序,我正在捕获密钥是否退格。现在在里面我需要根据删除的密钥执行一些任务。请帮忙。

3 个答案:

答案 0 :(得分:6)

this thread中的getCursorPosition功能进行一些调整后,您可以通过跟踪当前光标选择来删除字符。

代码处理以下条件:

  1. 在结尾输入然后退格。
  2. 将光标移动到文本中间并删除/退格。
  3. 选择一段文字,然后删除/退格。
  4. $.fn.getCursorPosition = function() {
        var el = $(this).get(0);
        var pos = 0;
        var posEnd = 0;
        if('selectionStart' in el) {
            pos = el.selectionStart;
            posEnd = el.selectionEnd;
        } else if('selection' in document) {
            el.focus();
            var Sel = document.selection.createRange();
            var SelLength = document.selection.createRange().text.length;
            Sel.moveStart('character', -el.value.length);
            pos = Sel.text.length - SelLength;
            posEnd = Sel.text.length;
        }
        // return both selection start and end;
        return [pos, posEnd];
    };
    
    $('#text').keydown(function (e) {
        var position = $(this).getCursorPosition();
        var deleted = '';
        var val = $(this).val();
        if (e.which == 8) {
            if (position[0] == position[1]) {
                if (position[0] == 0)
                    deleted = '';
                else
                    deleted = val.substr(position[0] - 1, 1);
            }
            else {
                deleted = val.substring(position[0], position[1]);
            }
        }
        else if (e.which == 46) {
            var val = $(this).val();
            if (position[0] == position[1]) {
    
                if (position[0] === val.length)
                    deleted = '';
                else
                    deleted = val.substr(position[0], 1);
            }
            else {
                deleted = val.substring(position[0], position[1]);
            }
        }
        // Now you can test the deleted character(s) here
    });
    

    这是Live Demo

答案 1 :(得分:3)

您可以使用keydown事件处理程序,以便仍然可以删除要删除的最后一个字符:

$('textarea').on('keydown',function(e) {
    var deleteKeyCode = 8,
        value = $(this).val(),
        length = value.length,
        lastChar = value.substring(length-1, length);

    if (e.which === deleteKeyCode) {
        alert(lastChar); 
    }
});

答案 2 :(得分:-1)

Live Demo

$('input').keydown(function(e){
    $(this).data('prevVal', $(this).val());   
}).keyup(function(e){
    if(e.keyCode === 8) {//delete
        var ele = $(this); 
        var val = ele.data('prevVal'); 
        var newVal = ele.val(); 
        var removedChar = val.substring(val.length-1);
        alert(removedChar); 
    }
});