2016-07-25 41 views
0

我试图格式化基于国家的电话号码字段。当用户填写详细信息时逻辑工作正常,但在国家更改并重新填写时不起作用。 例如: 填写德国的表格,然后如果尝试将县更改为美国并填写电话“+”,即使格式不同,也不会重新加载页面。表单验证Jquery对象

$(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

你能提供一个示例代码的[小提琴](https://jsfiddle.net/)吗?它会使调试方式更快 –

+0

https://jsfiddle.net/ranred/dap3L426/ – temperature

+0

是否必须在键入时进行格式设置?重新格式化onchange号码可能会更容易。为每个国家创建格式化程序方法,并附上正确的/在国家更改时拆除上一个。 您应该将原始数字作为自定义数据属性存储在元素上。 也看看这实际验证:http://html5pattern.com/Phones – imjosh

回答

0

不知道这是否是您的错误的原因,但此行需要得到来自

$(this).val("+" + $this.val()); 

校正为该

$(this).val("+" + $(this).val()); 

这是一个快速追赶,只是使用您的浏览器JavaScript控制台进行调试。

查看更新的小提琴here。您可能还想将起始括号添加到您的国际前缀中。