angularjs掩码覆盖字符

map*_*ap7 5 mask angularjs angular-ui

我使用angular-ui mask模块在日期字段上设置了掩码,如下所示:

<input type="text"
     id="date"
     ng-model="transaction.date"
     ui-mask="99/99/9999" />
Run Code Online (Sandbox Code Playgroud)

如果我在该字段中有30/05/2013,并且想要将其更改为10/05/2013,只需在开头添加一个'1',它就会将所有字符推到一起,因此它变为13/00/5201.

有没有办法强制ui-mask覆盖插入它的角色?(这样可以避免某人点击'删除'然后再出现这个角色.

示例:http://jsfiddle.net/5NbD7/ 如果您在我的示例前面键入'30',您将最终得到30/01/0120我宁愿它覆盖字符并产生30/01/2010

vin*_*aut 4

我不知道有更简单的方法,但你尝试以下方法:

  • 如果您还没有这样做,您需要从源代码下载未缩小的 mask.js 并将其链接到您的 html 中。

https://rawgithub.com/angular-ui/ui-utils/master/modules/mask/mask.js

  • 然后你需要像这样修改 mask.js 的源代码(搜索注释//Update Values并将此代码放在下面):

...

         // 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));
           }
Run Code Online (Sandbox Code Playgroud)

...

现在,在更新值之前,mask 将根据光标(插入符号)的位置对旧值中的字符和新值中的字符进行串联。

它绝不是一个可靠的解决方案,但它应该让您知道如果您想更多地自定义输入或检查此更改不会破坏其他任何内容,应该在哪里查找。

小提琴: http: //jsfiddle.net/CALvj/