防止Safari中输入焦点更改的Javascript
我使用以下代码段将破折号插入SSN输入字段。(代码段过去也被用来用*来屏蔽,所以这就是为什么该部分被注释掉的原因)。但是,此代码在Safari上不起作用。无论何时,只要您关注此代码所在的字段,就不能将焦点更改为任何其他字段,您的光标将永远卡在该字段中。有没有办法在不完全重写此代码段的情况下修复此问题防止Safari中输入焦点更改的Javascript,javascript,jquery,forms,safari,Javascript,Jquery,Forms,Safari,我使用以下代码段将破折号插入SSN输入字段。(代码段过去也被用来用*来屏蔽,所以这就是为什么该部分被注释掉的原因)。但是,此代码在Safari上不起作用。无论何时,只要您关注此代码所在的字段,就不能将焦点更改为任何其他字段,您的光标将永远卡在该字段中。有没有办法在不完全重写此代码段的情况下修复此问题 var value; var $ssn = $('#ssn'); var $ssnVal = $('#ssn-val'); String.prototype.replaceAt = functio
var value;
var $ssn = $('#ssn');
var $ssnVal = $('#ssn-val');
String.prototype.replaceAt = function(index, character) {
return this.substr(0, index) + character + this.substr(index + character.length);
}
var ssn = {
init: function() {
this.bind();
},
bind: function() {
$ssn.on('focus', this.syncInput)
.on('input', this.syncInput)
.on('change', this.syncInput)
.on('blur', this.syncInput)
.on('keydown', this.syncInput)
.on('keyup', this.syncInput)
.on('click', this.syncInput);
},
transformDisplay: function(val) {
// Strip all non numbers
var displayVal = val.replace(/[^0-9|\\*]/g, '');
displayVal = displayVal.substr(0, 9);
// Inject dashes
if (displayVal.length >= 4) {
displayVal = displayVal.slice(0, 3) + '-' + displayVal.slice(3);
}
if (displayVal.length >= 7) {
displayVal = displayVal.slice(0, 6) + '-' + displayVal.slice(6);
}
// Replace all numbers with astericks
// displayVal = displayVal.replace(/[0-9]/g, '*');
return displayVal;
},
transformValue: function(val) {
if (typeof value !== 'string') {
value = "";
}
if (!val) {
value = null;
return;
}
var cleanVal = val.replace(/[^0-9|\\*]/g, '');
cleanVal = cleanVal.substr(0, 9);
for (i = 0, l = cleanVal.length; i < l; i++) {
if (/[0-9]/g.exec(cleanVal[i])) {
// console.log('replaced', i, cleanVal[i]);
value = value.replaceAt(i, cleanVal[i]);
}
}
value = value.substr(0, cleanVal.length);
},
syncInput: function() {
var $input = $(this);
var val = $(this).val();
var displayVal = ssn.transformDisplay(val);
ssn.transformValue(val);
this.setSelectionRange(val.length, val.length);
$input.val(displayVal);
$ssnVal.val(value);
// console.log('value set', displayVal);
}
};
ssn.init();
var值;
变量$ssn=$(“#ssn”);
变量$ssnVal=$(“#ssn val”);
String.prototype.replaceAt=函数(索引,字符){
返回this.substr(0,索引)+字符+this.substr(索引+字符.长度);
}
变量ssn={
init:function(){
这个。bind();
},
绑定:函数(){
$ssn.on('focus',this.syncInput)
.on('input',this.syncInput)
.on('change',this.syncInput)
.on('blur',this.syncInput)
.on('keydown',this.syncInput)
.on('keyup',this.syncInput)
.on('click',this.syncInput);
},
转换显示:功能(val){
//去掉所有非数字
var displayVal=val.replace(/[^0-9 |\\*]/g',);
displayVal=displayVal.substr(0,9);
//注入破折号
如果(displayVal.length>=4){
displayVal=displayVal.slice(0,3)+'-'+displayVal.slice(3);
}
如果(displayVal.length>=7){
displayVal=displayVal.slice(0,6)+'-'+displayVal.slice(6);
}
//将所有数字替换为星号
//displayVal=displayVal.replace(/[0-9]/g,'*');
返回displayVal;
},
转换值:函数(val){
如果(值的类型!=='string'){
value=“”;
}
如果(!val){
值=空;
返回;
}
var cleanVal=val.replace(/[^0-9 |\\*]/g',);
cleanVal=cleanVal.substr(0,9);
对于(i=0,l=cleanVal.length;i