jQuery 输入格式设置是指使用 jQuery 库来控制和格式化用户在表单输入字段(如文本框)中输入的数据。这种技术常用于确保数据以特定格式(如电话号码、日期、货币等)显示和存储。
// 引入jQuery和jQuery Mask插件后
$(document).ready(function(){
$('#phone').mask('(000) 000-0000');
$('#date').mask('00/00/0000');
$('#credit-card').mask('0000 0000 0000 0000');
});
$(document).ready(function(){
$("#date").inputmask("dd/mm/yyyy");
$("#phone").inputmask("(999) 999-9999");
$("#currency").inputmask({
alias: 'currency',
prefix: '$ ',
groupSeparator: ',',
autoGroup: true,
digits: 2,
digitsOptional: false
});
});
$(document).ready(function(){
$('#phone').on('input', function(){
var val = $(this).val().replace(/\D/g, '');
if (val.length > 3 && val.length <= 6) {
val = '(' + val.substring(0, 3) + ') ' + val.substring(3);
} else if (val.length > 6) {
val = '(' + val.substring(0, 3) + ') ' + val.substring(3, 6) + '-' + val.substring(6, 10);
}
$(this).val(val);
});
});
原因:直接在输入框中显示格式化字符,导致提交的数据包含非数据字符。
解决方案:
// 提交前去除格式化字符
$('form').submit(function(){
var rawPhone = $('#phone').val().replace(/\D/g, '');
$('#phone').val(rawPhone);
});
原因:格式化时重新设置整个输入框值,导致光标位置重置。
解决方案:
function formatPhone(input) {
var cursorPos = input.prop('selectionStart');
var val = input.val().replace(/\D/g, '');
var formattedVal = '';
if (val.length > 0) {
formattedVal = '(' + val.substring(0, 3);
if (val.length > 3) {
formattedVal += ') ' + val.substring(3, 6);
if (val.length > 6) {
formattedVal += '-' + val.substring(6, 10);
}
}
}
input.val(formattedVal);
// 调整光标位置
if (cursorPos === 1 && val.length > 0) cursorPos = 2;
else if (cursorPos === 5 && val.length > 3) cursorPos = 7;
else if (cursorPos === 10 && val.length > 6) cursorPos = 11;
input[0].setSelectionRange(cursorPos, cursorPos);
}
$('#phone').on('input', function(){
formatPhone($(this));
});
原因:事件处理未考虑键盘操作的特殊情况。
解决方案:
$('#phone').on('keydown', function(e){
// 处理退格键在分隔符位置的情况
if (e.keyCode === 8 && [1, 5, 10].indexOf(this.selectionStart) !== -1 &&
this.selectionStart === this.selectionEnd) {
e.preventDefault();
var val = $(this).val().replace(/\D/g, '');
var newVal = val.substring(0, this.selectionStart - 1) + val.substring(this.selectionStart);
$(this).val(newVal);
formatPhone($(this));
$(this)[0].setSelectionRange(this.selectionStart - 1, this.selectionStart - 1);
}
});
对于更复杂的格式化需求,可以考虑使用专门的库如:
没有搜到相关的文章