2017-04-12 27 views
0

我有以下的角度指令,应利用输入并拒绝不属于英文字母字符的任何字符:角指示大写字母,而忽略数字

<input type="text" maxlength="1" capitalize /> 


.directive('capitalize', function() { 
    return { 
    require: 'ngModel', 
    link: function(scope, element, attrs, modelCtrl) { 
     var capitalize = function(inputValue) { 
     if (inputValue == undefined) inputValue = ''; 

     inputValue = inputValue.replace(/[^a-zA-Z]/g, ''); //to reject non-alphabet characters 
     var capitalized = inputValue.toUpperCase(); 
     if (capitalized !== inputValue) { 
      modelCtrl.$setViewValue(capitalized); 
      modelCtrl.$render(); 
     } 
     return capitalized; 
     } 
     modelCtrl.$parsers.push(capitalize); 
     capitalize(scope[attrs.ngModel]); // capitalize initial value 
    } 
    }; 
}) 

它确实大写输入,但不拒绝非字母字符。建议?

+0

我放弃你的代码为小提琴和它的工作。如果您没有输入正确的信息,模型不会更新:http://jsfiddle.net/p149wuL1/ –

+0

更正模型没有更新,但是如何防止文本输入接受不正确的字符? – lilbiscuit

+0

您可以查看angular-ui-mask来查看它是否满足您的需求。 –

回答

2

将独立变量中的特殊章程删除后存储更新的输入值,然后将其大写,以便可以将大写的更新输入值与原始值进行比较。

var charString = inputValue.replace(/[^a-zA-Z]/g, ''); //to reject non-alphabet characters 
var capitalized = charString.toUpperCase(); 

更新的jsfiddle这里:http://jsfiddle.net/p149wuL1/3/ 我希望这有助于

0

这是相当普遍的想法 - 让我们只允许输入一些特殊字符。 (在你的情况只有字母)它看起来有一段时间的吸引力。

不幸的是,没有简单的解决方案。看起来没有用户友好的解决方案。请记住,有输入的3种主方式到文本字段: 1.键盘 2.复制粘贴 3.拖放

如果第一个方式,可以合理地处理,那第二和第三个? “123%^ $ R,A”应该贴在你的案子上?粘贴'123'的结果应该是什么?没有?

这里添加一些技巧,以保持CARRET位置...

综上所述,我好心建议你让文本字段设置为文本字段,只是输入标记为无效,如果有错误的字符。

+0

如果指令可以将“c”更改为“C”,为什么不能将“2”更改为“?”? – lilbiscuit

+0

,因为当你粘贴123并且看不到任何改变 - 这看起来没有任何作用,也因为它改变了文本的大小 - 将'a1b'粘贴到max-length ='2'的字段导致a1,转换为A1是无害的,转换为1很奇怪。尝试在Google网站上找到这样的控件。 –

相关问题