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使用しcurvalます(変数の値を凝視するが、とにかく要素の元のプロパティを参照する場合は、そもそもなぜ変数を割り当てるのかという疑問が生じます)。
于 2012-07-25T20:40:36.293 に答える