AngularJS -- 查看哪个字符被退格键或删除键删除,不进行比较

AngularJS -- See which character was deleted by the backspace or delete key without comparing

我正在创建一个需要从文本输入中获取用户输入的应用程序。如果在任何时候输入的字符不正确(即:一个数字,但它应该只是 a-z),输入框将变得无效。然后我将该字符放入输入中的 "bad characters" 数组中。删除字符后输入框应该会重新生效

我知道我可以在每次按下新按键时获取输入并进行检查,但随后会遍历每个字符以确保它被允许。 我很好奇是否有任何方法可以查看按退格键删除了哪个字符。

我不能post我的代码,对不起。

我在 html 中使用 ng-keydown 和 mg-model。当按下确认按钮时,输入应该在 ng-model 中有效。

谢谢 -- 我正在自学 Angularjs,所以我还不是最擅长的。

要获取已删除的字符,您可以使用普通的旧 javascript:

var caret_get_position = function(element){
    var pos    = 0;
    var posEnd = 0;
    if('selectionStart' in element){
        pos    = element.selectionStart;
        posEnd = element.selectionEnd;
    }else if('selection' in document){
        element.focus();
        var Sel       = document.selection.createRange();
        var SelLength = document.selection.createRange().text.length;
        Sel.moveStart('character', -element.value.length);
        pos    = Sel.text.length-SelLength;
        posEnd = Sel.text.length;
    }
    // return both selection start and end;
    return [pos, posEnd];
};
//get deletet character
element.addEventListener('keydown', function(event){
    var keycode      = ('which' in event)?event.which:event.keyCode;
    caret_positions  = caret_get_position(element);
    var val = this.value;
    if(keycode == 8){
        if(caret_positions[0] == caret_positions[1]){
            if(caret_positions[0] == 0){
                deleted = '';
            }else{
                deleted = val.substr(caret_positions[0]-1, 1);
            }

        }else{
            deleted = val.substring(caret_positions[0], caret_positions[1]);
        }
    }else if(keycode == 46){
        if(caret_positions[0] == caret_positions[1]){
            if(caret_positions[0] === val.length){
                deleted = '';
            }else{
                deleted = val.substr(caret_positions[0], 1);
            }
        }else{
            deleted = val.substring(caret_positions[0], caret_positions[1]);
        }
    }
});

所以我到底在做什么:

caret_get_position 几乎是不言自明的。它将获得插入符的当前位置(输入字段中的闪烁线)。即使 selected 范围(这个蓝色的东西)如果你 select 超过一个字符。

在 keydown 事件中,它将检查按下的键,并进一步检查插入符号的位置。 最后删除的字符在变量deleted中。这是我的代码,所以你需要根据你的需要进行调整。