0

我写了一个函数,我把它绑定到我希望它格式化为 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 );
4

1 回答 1

1

出于另一个问题中解释的相同原因,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在and之间交替curval(如果你要盯着变量中的一个值,但无论如何都要引用元素的原始属性,那么它会引发一个问题,为什么你首先要分配一个变量)。
于 2012-07-25T20:40:36.293 回答