2

我试图让 10 位数字看起来像美国电话号码(即(###)###-####)。我的代码确实实现了第一个目标,但它也做了一些我不太明白的事情。输入数字时,字符“()”会在输入任何其他数字之前显示。我希望左括号首先出现,右括号在输入第三个数字后出现。请不要给我新的解决方案;尝试指出我所描述的问题。

<script type="text/javascript">
  $('.drumbi-caller-number').live('keydown', function (event) {
    if (event.keyCode == 8 || event.keyCode == 37 || event.keyCode == 39) {
    } else {
        inputval = $(this).val();
        var string = inputval.replace(/[^0-9]/g, "");
        var first3 = string.substring(0,3);
        var next3 = string.substring(3,6);
        var next4 = string.substring(6,9);  
        var string = ("(" + first3 + ")" + next3 + "-" + next4);
        $(this).val(string);
    }
});
</script>

这是一个显示此行为的 jsFiddle:http: //jsfiddle.net/bigthyme/j6kHn/3/

4

4 回答 4

4

替换keydownkeyup,keydown输入元素的值未更新

也有条件地设置你的string,只有在足够长的情况下:

var string = string.length > 2 ? ("(" + first3 + ")" + next3 + "-" + next4) : first3;

这是代码:http: //jsfiddle.net/j6kHn/10

顺便说一句:你也应该.live(...).on(...)as .live()is deprecated 替换..

于 2012-10-30T23:51:57.913 回答
1

您需要first3在附加括号之前检查长度:

var string = ("(" + first3 + ((first3.length>=3)?")":"") + next3 + "-" + next4);

尽管不在您的问题中,但您可以对连字符执行相同的操作:

var string = ("(" + first3 + 
     // only append the ) if the you have 3+ chars
     ((first3.length>=3)?")":"") + 
     next3 + 
     // only append the - if the you have 6+ chars
     (((first3+next3).length>=6)?"-":"") + 
     next4);

您还应该使用.on()代替live();

看看这一切都在这个 jsFiddle中工作

于 2012-10-30T23:51:21.770 回答
1

一起去

$('.foo').on('keyup', function (event) {
  $(this).val($(this).val().replace(/\D/g, "").replace(/(\d{0,3})(\d{0,3})(\d{0,4}).*/, "($1) $2-$3"));
});

在此处测试此代码。

于 2012-10-30T23:59:32.273 回答
1

尝试使用此代码,它应该可以解决您的所有问题:

演示:http: //jsfiddle.net/bN6Rh/3/

jQuery:

$('.foo').on('keyup', function(event) {
    if (event.keyCode == (8 || 37 || 39)) { }
    else {
        inputval = $(this).val();
        var string = inputval.replace(/[^0-9]/g, "");
        var first3 = string.substring(0, 3);
        var next3 = " " + string.substring(3, 6);
        var next4 = string.substring(6, 10);
        if (string.length < 3) { // Less than 3
            var string = "(" + first3;
        }
        else if (string.length > 2 && string.length < 7) { // More than 2 and less than 7
            var string = "(" + first3 + ")" + next3;
        }
        else { // Anything else
            var string = "(" + first3 + ")" + next3 + "-" + next4;
        }
        $(this).val(string);
    }
});​

问题是您没有检查字符数,因此只要输入任何内容()-,上面的代码还会添加您提到的所需空间。

代码当然可以更压缩:

$('.foo').on('keyup', function(e) {
    if (e.keyCode == (8 || 37 || 39));
    else {
        var str = this.value.replace(/[^0-9]/g, "");

        var f3 = str.substring(0, 3),
            n3 = " " + str.substring(3, 6),
            n4 = str.substring(6, 10);

        if (str.length<3) str = "(" + f3;
        else if (str.length>2&&str.length<7) str="("+f3+")"+n3;
        else str="("+f3+")"+n3+"-"+n4;

        this.value = str;
    }
});​
于 2012-10-31T00:04:17.880 回答