1

私は機能を持っています:

function maskInput(input, location, delimiter, length) {
    //Get the delimiter positons
    var locs = location.split(',');

    //Iterate until all the delimiters are placed in the textbox
    for (var delimCount = 0; delimCount <= locs.length; delimCount++) {
        for (var inputCharCount = 0; inputCharCount <= input.length; inputCharCount++) {

            //Check for the actual position of the delimiter
            if (inputCharCount == locs[delimCount]) {

                //Confirm that the delimiter is not already present in that position
                if (input.substring(inputCharCount, inputCharCount + 1) != delimiter) {
                    input = input.substring(0, inputCharCount) + delimiter + input.substring(inputCharCount, input.length);
                }
            }
        }
    }

    input = input.length > length ? input.substring(0, length) : input;

    return input;
}

私はこれを使用します:

$(document).on('keypress paste drop blur', '#my_phone_number', function() {
    //remove any nondigit characters
    var myVal = $(this).val().toString().replace(/\D/g,'');
    $(this).val(myVal);


    var inVal   = maskInput(myVal, '3,7', '-', 12);

    $(this).val(inVal);
});

これは完全に機能しますが、文字列の途中から数字を削除してから再度追加しようとすると、文字列の末尾に追加され、現在の位置に固執しません。

例:

 Entered String: '1234567890'
 After Mask Function Is Called: '123-456-7890'
 Number 5 removed and entered Number 8 instead of 5: '123-467-8908'

文字列の末尾に番号8が追加されていることに注意してください。

どんな助けでも大歓迎です、ありがとう

4

1 に答える 1

1

入力の値はまだ変更されておらず、新しい値が入力にポストされる前にフィルターを適用するため、のkeyup代わりに使用する必要があります。そんなわけで新キャラ追加です。keypresskeypress

$(document).on('keyup paste drop blur', '#my_phone_number', function() {
    ...
});

ここでの作業コードの例http://jsbin.com/upinux/1/edit

于 2013-05-17T19:59:39.360 に答える