IE7和jquery的问题

时间:2012-07-25 20:09:58

标签: jquery internet-explorer-7

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

1 个答案:

答案 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.valuecurval之间交替(如果你要在变量中查看一个值但是引用该元素的原始属性,那么它就会引发为什么你首先分配一个变量的问题)