我写了一个函数,我将其绑定到我希望格式为XXX-XXX-XXXX的电话号码。这适用于Chrome,FF和IE8 +,但不适用于IE7。想知道是否有人发现代码有任何问题或与IE7不兼容。在IE7中,每次输入任何字符时,它都会删除它,类似于超过12个字符时应该执行的操作
(function( $ )
{
// This function formats a text field to a US
// phone number as the user types the information.
$.fn.usphone = function()
{
this.bind("change keyup input",function()
{
var curchrindex = this.value.length;
var curval = $(this).val();
var strvalidchars = "0123456789-";
var onlyDigits = curval.replace(/\D/g,'');
for (i =0; i < this.value.length; i++)
{
var curchar = curval[i];
if (strvalidchars.indexOf(curchar) == -1)
{
//delete the character typed if this is not a valid character.
$(this).val(curval.substring(0, i) + curval.substring(i+1, this.value.length));
return false;
}
}
if (onlyDigits.length >= 10) {
var tmpVal = '';
for (i =0; i < 10; i++)
{
tmpVal += onlyDigits[i];
if (i == 2 || i == 5) {
tmpVal += '-';
}
}
$(this).val(tmpVal);
}
});
};
})( jQuery );
答案 0 :(得分:1)
出于与another question中解释的相同原因,IE7不允许您使用[]
引用字符串字符。所以你在哪里:
var curchar = curval[i];
IE7正在返回undefined
,然后检查失败,然后强制它删除该字符并退出。但是,如果将其更改为:
var curchar = curval.charAt(i);
// ~~ OR ~~
var curchar = curval.substring(i,1);
然后,您可以检索单个字符并继续。但是,我想提一下你可以使用一些重构:
$(this).val()
和this.value
之间交替。this.value
和curval
之间交替(如果你要在变量中查看一个值但是引用该元素的原始属性,那么它就会引发为什么你首先分配一个变量的问题)