我有一個指令,做幾件事情到一組6個單位文本輸入之間移動任何非字母字符 3.如果用戶按下退格鍵,則向後移動一個輸入,如果用戶按退格鍵兩次,則刪除前一個字符。角指令輸入和格式
項目1和2工作,但項目3不按預期工作。現在,退格轉到上一個輸入,並在一步中刪除輸入。
這裏是UPDATED代碼。我如何獲得#3所述的工作?
Here's a Fiddle (caps not working in the Fiddle but works locally for me)。
<input class="code-char" type="text" maxlength="1" ng-model="code[0]" capitalize>
<input class="code-char" type="text" maxlength="1" ng-model="code[1]" capitalize>
<input class="code-char" type="text" maxlength="1" ng-model="code[2]" capitalize>
.directive('capitalize', function() {
return {
require: 'ngModel',
link: function(scope, element, attrs, modelCtrl) {
var capitalize = function(inputValue) {
if (inputValue == undefined) inputValue = '';
var charString = inputValue.replace(/[^a-zA-Z]/g, ''); //to reject non-alphabet characters
var shouldDelete = false;
var shouldMoveBack = true;
element.bind('keyup', function(event) {
var key = event.keyCode;
if(key === 8) {
if(shouldDelete == true) {
shouldDelete = false;
element[0].value ='';
} else {
shouldDelete = true;
if(!scope.$first && shouldMoveBack == true) {
element[0].previousElementSibling.focus();
shouldMoveBack == false;
} else {
shouldMoveBack == true;
}
}
} else {
if(charString > '') element[0].nextElementSibling.focus();
}
});
var capitalized = charString.toUpperCase();
if (capitalized !== inputValue) {
modelCtrl.$setViewValue(capitalized);
modelCtrl.$render();
}
return capitalized;
}
modelCtrl.$parsers.push(capitalize);
capitalize(scope[attrs.ngModel]); // capitalize initial value
}
};
})
,因爲你設置了'值= '''它刪除輸入。沒有辦法知道用戶是否從一個** single **'keyup'事件連續按了兩次鍵...... – Claies
我添加了一個有條件的'shouldMoveBack',所以光標不會移回到之前的輸入,除非它在之前的退格鍵「keyup」上被刪除。但它仍然會在每個backspace'keyup'上跳回。 – lilbiscuit
我想我需要檢測遊標是向前移動到輸入還是後退到它。 – lilbiscuit