【发布时间】:2016-10-08 21:32:43
【问题描述】:
我正在尝试创建一个指令来为我的输入创建自定义掩码。我知道我可以使用其他库,但有时我需要根据公司需要自定义输入(例如“OS.012-08765”),所以我宁愿创建自己的指令。
到目前为止,我能够在我需要的模式上格式化数字,但不能在输入上,只能在模型上。对于这个例子,我将使用资金输入,因为它更容易使用(我认为)。这是我正在使用的代码:
function myMoney() {
return {
restrict: 'A',
require: 'ngModel',
link: function(scope, element, attr, ngModelCtrl) {
ngModelCtrl.$formatters.push( formatInput );
ngModelCtrl.$render = renderViewValue;
ngModelCtrl.$parsers.push( parseOutput );
function formatInput( value ) {
value = formatNumber(value);
return value;
}
function parseOutput( value ) {
value = formatNumber(value);
return value;
}
function renderViewValue() {
element.html( ngModelCtrl.$viewValue );
}
function formatNumber(value) {
if(!value) {
value = '000';
}
var checkValue = value.replace(/[^0-9\.]/g, '');
if(checkValue != value) {
value = checkValue;
}
value = value.toString();
if(value.length < 3) {
value = ('000'+value).slice(-3);
}
var
firstChar = value.slice(0, value.length-2),
lastChar = value.slice(-2),
firstChar = Number(firstChar).toLocaleString(),
finalChar = '$'+firstChar+','+lastChar;
return finalChar;
}
}
}
}
这是一个代码:http://plnkr.co/edit/UjZkPFL0V4FRrDUL9jAJ?p=preview
主要问题是输出在哪里,如果您开始在输入上输入,则该值没有掩码,只是数字。但是该模型具有适当的掩码。
因此,基于此,我有两个主要问题:
- 首先:我想反转这些结果。我想在文本框中输入内容并在文本框中设置掩码,而模型只是纯数字(没有掩码)。
- 第二:如果我创建一个按钮来更新模型上的值,它不会在掩码中格式化,而是保持纯文本。
我该如何解决这些问题?
【问题讨论】:
-
你不能使用
<input placeholder="__.___-_____ ">吗?所以你不必担心用你的实际角色替换“_”。 -
但是占位符的问题在于,它不会根据用户类型来填充,这正是我想要的。
标签: javascript angularjs