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
中。这是我的代码,所以你需要根据你的需要进行调整。
我正在创建一个需要从文本输入中获取用户输入的应用程序。如果在任何时候输入的字符不正确(即:一个数字,但它应该只是 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
中。这是我的代码,所以你需要根据你的需要进行调整。