Javascript angularjs指令允许制表符字符
我试图创建一个angularjs指令,允许在文本字段中输入制表符。其部分工作,但错误未正确显示。我希望这个字段也是必需的。这是我的密码Javascript angularjs指令允许制表符字符,javascript,angularjs,Javascript,Angularjs,我试图创建一个angularjs指令,允许在文本字段中输入制表符。其部分工作,但错误未正确显示。我希望这个字段也是必需的。这是我的密码 .directive('allowTab', function () { return { require: 'ngModel', link: function(scope, ele, attrs, c) { ele.bind('keydown keyup', fun
.directive('allowTab', function () {
return {
require: 'ngModel',
link: function(scope, ele, attrs, c) {
ele.bind('keydown keyup', function(e) {
var val = this.value;
if (e.keyCode === 9 && e.type === 'keydown') { // tab was pressed
// get caret position/selection
var start = this.selectionStart,
end = this.selectionEnd;
// set textarea value to: text before caret + tab + text after caret
this.value = val.substring(0, start) + '\t' + val.substring(end);
// put caret at right position again
this.selectionStart = this.selectionEnd = start + 1;
c.$setValidity('allowTab', true);
// prevent the focus lose
return false;
}
else if(e.keyCode !== 9 && e.type === 'keyup') {
if(val === '') {
c.$setValidity('allowTab', false);
}
else {
c.$setValidity('allowTab', true);
}
}
});
}
}
});
以下是JSFIDLE:您是否试图在文本框中的制表符后保持焦点 您必须使用preventDefault()方法:
在jQuery中更新文本框值并设置验证,而不是在angular生命周期中。要及时更新前端,需要调用scope.$digest()将角度模型与dom同步
// put caret at right position again
this.selectionStart = this.selectionEnd = start + 1;
c.$setValidity('allowTab', true);
scope.$digest();
我已经扩展了Michael版本,并使其完全符合我的要求,下面是JSFIDLE:
// put caret at right position again
this.selectionStart = this.selectionEnd = start + 1;
c.$setValidity('allowTab', true);
scope.$digest();
else if (e.keyCode !== 9 && e.type === 'keyup') {
var hasTab = val.indexOf('\t') > -1;
if(hasTab){
c.$setValidity('allowTab', true);
}
else if(val == '') {
c.$setValidity('allowTab', false);
}
else {
c.$setValidity('allowTab', true);
}
scope.$digest();
}