2016-07-25 12 views
0

電話番号フィールドに、米国、カナダ(xxx)xxx-xxxxの形式で電話番号フィールドをあらかじめ入力しようとしています。残りの国では+ xxxxxxxとして問題が発生します。 Jqueryオブジェクトが以前の値を保持しているので、ロジックは動作していないようです。

JSFIDDLE

$(document).ready(function($) { 
    $('#country').on('change', function() { 

    if (this.value == 'US' || this.value == 'CA') { 

     $('#C_BusPhone') 
     .keydown(function(e) { 

     var key = e.charCode || e.keyCode || 0; 

     $phone = $(this); 

     if (key !== 8 && key !== 9) { 
      if ($phone.val().length === 4) { 
      $phone.val($phone.val() + ')'); 
      } 
      if ($phone.val().length === 5) { 
      $phone.val($phone.val() + ' '); 
      } 
      if ($phone.val().length === 9) { 
      $phone.val($phone.val() + '-'); 
      } 
     } 
     return (key == 8 || 
      key == 9 || 
      key == 46 || 
      (key >= 48 && key <= 57) || 
      (key >= 96 && key <= 105)); 
     }) 

     .bind('focus click', function() { 
     $phone = $(this); 

     if ($phone.val().length === 0) { 
      $phone.val('('); 
     } else { 
      var val = $phone.val(); 
      $phone.val('').val(val); 
     } 
     }) 

     .blur(function() { 
     $phone = $(this); 

     if ($phone.val() === '(') { 
      $phone.val(''); 
     } 
     }); 

    } else { 

     $('#C_BusPhone') 
     .keydown(function(e) { 
     if ($(this).val().indexOf("+") === -1) { 
      $(this).val("+" + $(this).val()); 
     } 
     }) 

    } 


    }); 
}); 
+0

あなたは( '.bind同じコード、'で.bind() 'と' .onを() 'することはできません)が' '古い廃止予定のバージョンのためのものであり、 .on() 'は新しい方法です。私はどちらのバージョンでも –

+0

を動作させることはできないと思いますし、' var $ phone = $(this); ' –

+0

問題は最初に正しく動作するのですが、ドロップダウンの値を変更して、前のドロップダウン先の国のプレフィックスを保持している情報を再入力しようとしました – temperature

答えて

0

JSコード:

$(document).ready(function($) { 
$('#country').on('change', function() { 

    $('#C_BusPhone').val(""); 
    alert($("#country").val()); 
}); 

$('#C_BusPhone').keydown(function(e) { 

    var key = e.charCode || e.keyCode || 0; 
    var phone = $('#C_BusPhone'); 

    if ($("#country").val() == 'US' || $("#country").val() == 'CA') { 
     console.log($("#country").val()); 

     if (key !== 8 && key !== 9) { 
      if (phone.val().length === 4) { 
      phone.val(phone.val() + ')'); 
      } 
      if (phone.val().length === 5) { 
      phone.val(phone.val() + ' '); 
      } 
      if (phone.val().length === 9) { 
      phone.val(phone.val() + '-'); 
      } 
     } 

     if (phone.val().length === 0) { 
      phone.val('('); 
     } 
     else { 
      var val = phone.val(); 
      phone.val('').val(val); 
     } 

    } 
    else { 

     if (phone.val().indexOf("+") === -1) { 
      phone.val("+" + phone.val()); 
     } 
    } 
    }); 
}); 
1
あなただけのイベントを追加し続ける

、彼らは上書きされ得ることはありません。イベントを手動で削除する必要があります。 bind()を使用しているので、unbind()となります。 1.7以上on()off()を使用するbind()unbind()上好ましいため

$('#C_BusPhone').unbind("keydown"); 

official jQuery documentationあたりの、。

もう1つのオプションは、1つのイベントをアタッチし、実行するコードを論理チェックすることです。