我想在不改变实际值的情况下屏蔽输入框中的文本。我不能使用任何插件。
我目前正在这样做 - 但如您所见,问题是实际值在提交时发生了变化。我怎样才能改变显示值?
$("input[name='number']").focusout(function(){
var number = this.value.replace(/(\d{2})(\d{3})(\d{2})/,"$1-$2-$3");
this.value = number;
}
最佳答案
你需要两个输入
两个输入应该可以完成工作。一个输入将包含屏蔽文本,另一个将是包含真实数据的隐藏输入。
<input type="text" name="masknumber">
<input type="text" name="number" style="display:none;">
我处理屏蔽的方法是构建一个用于屏蔽和取消屏蔽内容的函数,这样一切都保持一致。
$("input[name='masknumber']").on("keyup change", function(){
$("input[name='number']").val(destroyMask(this.value));
this.value = createMask($("input[name='number']").val());
})
function createMask(string){
return string.replace(/(\d{2})(\d{3})(\d{2})/,"$1-$2-$3");
}
function destroyMask(string){
return string.replace(/\D/g,'').substring(0,8);
}
Working JSFiddle
关于没有插件的 Javascript 输入文本屏蔽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40513950/