所以我要求通过在适当的位置提供连字符来格式化9位数字。如果数字是123456789,格式化后必须是123-45-6789。为此,我将maxlength设置为9中的HTML
<div class="form-group">
<label class="col-sm-2 control-label labelfont">SSN:</label>
<div class="col-sm-6">
<input type="text" class="form-control" placeholder="Enter the SSN" id="SSN" name="SSN" data-bind="value: SSN" onkeypress="return onlyNumbers(event);" maxlength="9">
</div>
<label class="col-sm-4 labelfont errorMsg" id="Err_SSN">Enter the SSN</label>
</div>
在JS中,我有以下代码
var Provider = function () {
var self = this;
self.ProviderID = ko.observable("");
self.SSN = ko.observable("");
};
var blurred = false; //Prevent reformatting when Tab back in.
$("#SSN").blur(function () {
if ($(this).val().trim().length == 0) {
$("#Err_SSN").text("Enter the SSN");
$("#Err_SSN").show();
$(this).addClass('borderclass');
}
else {
if (!blurred) {
$("#Err_SSN").hide();
var SSN = $("#SSN").val();
$("#SSN").val(SSN.substring(0, 3) + "-" + SSN.substring(3, 5) + "-" + SSN.substring(5));
$("#SSN").removeClass('borderclass');
Provider.SSN($("#SSN").val());
blurred = true;
}
}
});
$(document).ready(function () {
ko.applyBindings(new Provider());
});
上面的代码在我在相关字段中输入9位数后标签输出时,但是你可能已经想到了,如果我重新选择编辑数据,它就不起作用。现在,我知道编辑是没有发生,因为最大长度为9,连字符被视为字符之一。但如果我在字段中允许超过9位数,则该数字可被视为无效。所以,如果你们有更好的方法来实现我的要求,请指导我。
答案 0 :(得分:1)
您可以在聚焦文本字段时删除连字符:
$("#SSN").focus(function(){
$(this).val() = $(this).val().replace(/-/g,"");
});
未经测试,但这就是主意。