我使用angular-ui mask模块在日期字段上设置了掩码,如下所示:
<input type="text" id="date" ng-model="transaction.date" ui-mask="99/99/9999" />
如果我在该字段中有30/05/2013,并且想要将其更改为10/05/2013,只需在开头添加一个’1′,它就会将所有字符推到一起,因此它变为13/00/5201.
有没有办法强制ui-mask覆盖插入它的角色? (这样可以避免某人点击’删除’然后再出现这个角色.
示例:http://jsfiddle.net/5NbD7/
如果你在我的例子的前面键入’30’,你将最终得到30/01/0120我宁愿它覆盖字符并产生30/01/2010
解决方法
我不知道有一种更简单的方法,但你尝试以下方法:
>你需要从源代码下载mask.js,unminified,并在你的html中链接它,如果你还没有这样做的话.
https://rawgithub.com/angular-ui/ui-utils/master/modules/mask/mask.js
>然后你需要像这样修改mask.js的源代码(搜索注释//更新值并在下面输入此代码):
…
// Update values if (oldValueUnmasked !== "" && oldValueUnmasked!==valUnmasked && !isDeletion) { var charIndex = maskCaretMap.indexOf(caretPos); if (charIndex === -1) { charIndex = maskCaretMap.indexOf(caretPos+1); } valUnmasked=valUnmasked.substr(0,charIndex).concat(oldValueUnmasked.substr(charIndex,valUnmasked.length)); }
…
现在,在更新值之前,mask将根据光标(插入符号)的位置对旧值中的字符和新值中的字符进行串联.
它绝不是一个防范解决方案,但如果你想更多地定制输入或者检查这个改变不会破坏其他任何东西,它应该让你知道在哪里看.