2

10桁を米国の電話番号のように見せようとしています(つまり、(###)###-####)。私のコードはこの最初の目標を達成しますが、それは私が完全に理解できないことも行います。数字を入力すると、他の数字を入力する前に文字「()」が表示されます。最初に開き括弧を表示し、3桁目を入力した後に閉じ括弧を表示したいと思います。新しい解決策を教えてはいけません。私が説明している問題を特定してみてください。

<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

ところで: as is deprecated.live(...)にも置き換える必要があります...on(...).live()

于 2012-10-30T23:51:57.913 に答える
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

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

このコードを使用してみてください。すべての問題が解決するはずです。

デモ: 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 に答える