5

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

<input type="text"
     id="date"
     ng-model="transaction.date"
     ui-mask="99/99/9999" />

如果我在该字段中有 30/05/2013 并且想通过简单地在开头放置一个“1”来将其更改为 10/05/2013,它会将所有字符推到 13/00/5201 上。

有没有办法强制 ui-mask 覆盖插入它的字符?(这将使某人免于点击“删除”然后是角色。

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

4

2 回答 2

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));
           }

...

现在,在更新值之前,掩码将根据光标(插入符号)的位置,将旧值中的字符和新值中的字符连接起来。

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

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

于 2013-10-04T22:49:00.790 回答
1

我认为插入或覆盖输入文本的输入字符的方式取决于键盘当前的插入模式。用户只需按 Ins 键即可更改默认设置。从代码中更改它的唯一方法是强制按下 Ins 按键,但这在 Javascript 中是不允许的。

于 2013-10-01T05:30:57.713 回答