【问题标题】:AngularJS -- See which character was deleted by the backspace or delete key without comparingAngularJS - 查看退格键或删除键删除了哪个字符而不进行比较
【发布时间】:2018-12-25 18:06:30
【问题描述】:

我正在创建一个需要从文本输入中获取用户输入的应用程序。如果在任何时候输入的字符不正确(即:应该只是 a-z 的数字),输入框将变为无效。然后我将该字符放入输入中的“坏字符”数组中。如果字符被删除,输入框应该会再次生效。

我知道我可以在每次新按键时输入并检查它,但随后会检查每个字符以确保它被允许。 我很好奇是否有任何字符被退格键删除。

我无法发布我的代码,对不起。

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

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

【问题讨论】:

标签: angularjs angularjs-scope


【解决方案1】:

要获取已删除的字符,您可以使用普通的旧 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 几乎是不言自明的。它将获得插入符号的当前位置(输入字段中的闪烁线)。如果您选择多个字符,即使选择了一个范围(这个蓝色的东西)。

在 keydown 事件中,它会检查按下的键并检查插入符号的位置。 最后删除的字符在变量deleted中。这是来自我的代码,因此您需要根据需要对其进行调整。

【讨论】:

    猜你喜欢
    • 2017-03-30
    • 2012-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    相关资源
    最近更新 更多