2016-11-10 51 views
0

我需要正确格式化我的电话号码字段,并且我已经完成了它。向电话号码字段值附加+1

我能够使用此脚本在电话号码中添加短划线,但是如何在输入全部10个号码时向电话号码的前面添加“+1”?

$('#tel').keyup(function(){ 
    $(this).val($(this).val().replace(/(\d{3})\-?(\d{3})\-?(\d{4})/,'$1-$2-$3')) 
}); 
+0

如果'+ 1'是不可变的,为什么它需要被添加到输入的开始?也许把它放在输入旁边的一个区域来表明它是静态的。当用户键入最后一位数字时,这也会阻止您的输入文本跳转。 – 1252748

回答

2

我会当去除前缀和连字符。如果可能的话,首先建议您用input(其中有IE 10+ support)代替keyup事件。接下来,您应该重做您的过滤器以获取真正的数值。然后用你的正则表达式来对付它。在我的例子中,我使用虚线分隔的值替换了非10位数字,修剪了所有产生的尾部破折号,并用开头的+1替换了完整的10位数值。

$('#tel').on('input', function(){ 
 
    var filteredValue = this.value.replace('+1 ', '').match(/\d*/g).join(''); 
 
    $(this).val(filteredValue 
 
     .replace(/(\d{0,3})\-?(\d{0,3})\-?(\d{0,4}).*/,'$1-$2-$3') 
 
     .replace(/\-+$/, '') 
 
     .replace(/(\d{3})\-?(\d{3})\-?(\d{4})/,'+1 $1-$2-$3')) 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input id=tel>

下面是一个简化版本,更接近原始的,只有让在有10位结束的更换。

$('#tel').on('input', function(){ 
 
    var filteredValue = this.value.replace('+1 ', '').match(/\d*/g).join(''); 
 
    $(this).val(filteredValue 
 
     .replace(/(\d{3})\-?(\d{3})\-?(\d{4}).*/,'+1 $1-$2-$3')) 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input id=tel>

+0

下面的答案似乎仍然在我的IE浏览器。找不到工作不正常的地方,但我喜欢你对filteredValue的建议。它更干净。谢谢你,完美的作品! – cgrouge

3

你可以使用一个回调来添加+1时数为10位数以上,然后在十个位数等

$('#tel').on('keyup', function(){ 
 
\t if (this.value.replace(/\D/g,'').length > 9) { 
 
     \t if (this.value.indexOf('-') === -1) { 
 
     \t \t this.value = '+1' + this.value.replace(/(\d{3})\-?(\d{3})\-?(\d{4})/,'$1-$2-$3'); 
 
     \t } 
 
    } else if (this.value.indexOf('-') !== -1) { 
 
    \t this.value = this.value.replace(/(\+1|-)/g,''); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input id="tel">

+0

此解决方案确实按照我的需要工作。另一个回应称,keyup没有IE支持,这可能是唯一的问题。 – cgrouge

+0

@cgrouge - 不,另一个答案是IE10支持'input'事件,并且你应该改变它,这不是真的,IE11和以上都支持它。 '所有**浏览器都支持'keyup'事件,但不会捕获粘贴的内容等。 – adeneo

+0

@cgrouge adeneo在指出我没有说'keyup'不被支持是正确的。这两个事件之间的主要区别在于'keyup'监听正在释放的物理密钥,这强烈表明该值已更改。另一方面,“输入”是当输入的值属性发生变化时触发的事件。通过监听'keyup'来监听该事件有几个好处。然而,我将澄清IE 10支持'input'事件。它在IE 9中也得到了部分支持(不支持删除文本,例如剪切或退格)。 –