2016-07-25 69 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()'是對老年人depricated版本,而' .on()'是新的方式,我不認爲任何版本都允許這兩個工作 –

+0

,你必須編寫'var $ phone = $(this);''沒有'var'你正在使它成爲全局的並且實際上分配到相同的屬性 –

+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()

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

注意,每official jQuery documentation,爲1.7+使用on()off()優於bind()unbind()

另一種選擇是隻附加一個事件,並在運行的代碼內部進行邏輯檢查。