带有 jQ​​uery 和屏蔽输入插件的电话屏蔽

IT技术 javascript jquery input mask maskedinput
2021-02-17 14:29:11

我在使用 jQuery 和Masked Input Plugin屏蔽电话输入时遇到问题

有 2 种可能的格式:

  1. (XX)XXXX-XXXX
  2. (XX)XXXXX-XXXX

有没有办法掩盖它接受这两种情况?

编辑:

我试过:

$("#phone").mask("(99) 9999-9999"); 
$("#telf1").mask("(99) 9999*-9999");    
$("#telf1").mask("(99) 9999?-9999"); 

但它不像我想要的那样工作。

最接近的是 (xx)xxxx-xxxxx。

我想在输入第 10 个数字时得到 (xx)xxxx-xxxx,当我输入第 11 个数字时得到 (xx)xxxxx-xxxx。有可能吗?

6个回答

试试这个 - http://jsfiddle.net/dKRGE/3/

$("#phone").mask("(99) 9999?9-9999");

$("#phone").on("blur", function() {
    var last = $(this).val().substr( $(this).val().indexOf("-") + 1 );

    if( last.length == 3 ) {
        var move = $(this).val().substr( $(this).val().indexOf("-") - 1, 1 );
        var lastfour = move + last;
        var first = $(this).val().substr( 0, 9 );

        $(this).val( first + '-' + lastfour );
    }
});
它会引起用户的困惑,为什么用户应该按右键?他们怎么会知道呢?
2021-04-21 14:29:11
+1 表示您的努力,但它的作用与插件的作用没有区别。 $("#phone").mask("(999) 99999 - 999?9")
2021-05-02 14:29:11
@OscarJara 您可以在 JSFiddle 中对其进行测试
2021-05-04 14:29:11
@Raminson - 有区别。该掩码仍然使最终数字 XXXXX-XXX 而不是 XXXX-XXXX jsfiddle.net/dKRGE/8
2021-05-04 14:29:11
它可以通过插件完成,实现你自己的占位符,比如 $.mask.definitions['@']='[0-9 ]';
2021-05-13 14:29:11

这是一个 jQuery 电话号码掩码。不需要插件。格式可以根据您的需要进行调整。

更新了 JSFiddle

HTML

<form id="example-form" name="my-form">
    <input id="phone-number" name="phone-number" type="text" placeholder="(XXX) XXX-XXXX">
</form>

JavaScript

$('#phone-number', '#example-form')

.keydown(function (e) {
    var key = e.which || e.charCode || e.keyCode || 0;
    $phone = $(this);

    // Don't let them remove the starting '('
    if ($phone.val().length === 1 && (key === 8 || key === 46)) {
        $phone.val('('); 
        return false;
    } 
    // Reset if they highlight and type over first char.
    else if ($phone.val().charAt(0) !== '(') {
        $phone.val('('+$phone.val()); 
    }

    // Auto-format- do not expose the mask as the user begins to type
    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() + '-');
        }
    }

    // Allow numeric (and tab, backspace, delete) keys only
    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); // Ensure cursor remains at the end
    }
})

.blur(function () {
    $phone = $(this);

    if ($phone.val() === '(') {
        $phone.val('');
    }
});
它工作得很好。比添加新的依赖要好得多!
2021-04-17 14:29:11
这不考虑用户是否一直退格到输入的开头。它也不允许用户 cmd+a 或 ctrl+a 选择整个内容(删除或复制它)
2021-05-02 14:29:11
更新了代码和小提琴,因此不允许一直退格。
2021-05-10 14:29:11
@Cooleshwar - 只是因为包含的 jQuery 版本太旧了。我将 jQuery 更新到 v3.3.1,现在它在 IE 11 中运行良好。
2021-05-12 14:29:11

您也需要一个 jQuery 插件来使掩码工作。

-- HTML --

<input type="text" id="phone" placeholder="(99) 9999-9999">
<input type="text" id="telf1" placeholder="(99) 9999*-9999">
<input type="text" id="telf2" placeholder="(99) 9999?-9999">

-- JAVASCRIPT --

<script src="https://raw.githubusercontent.com/igorescobar/jQuery-Mask-Plugin/master/src/jquery.mask.js"></script>
<script>
$(document).ready(function($){
    $("#phone").mask("(99) 9999-9999"); 
    $("#telf1").mask("(99) 9999*-9999");    
    $("#telf2").mask("(99) 9999?-9999"); 
});
</script>

实际上正确的答案是在http://jsfiddle.net/HDakN/

Zoltan 回答将允许用户输入“(99) 9999”,然后让该字段不完整

$("#phone").mask("(99) 9999-9999?9");


$("#phone").on("blur", function() {
    var last = $(this).val().substr( $(this).val().indexOf("-") + 1 );

    if( last.length == 5 ) {
        var move = $(this).val().substr( $(this).val().indexOf("-") + 1, 1 );

        var lastfour = last.substr(1,4);

        var first = $(this).val().substr( 0, 9 );

        $(this).val( first + move + '-' + lastfour );
    }
});​

您可以在 Inputmask v3 中使用电话别名

$('#phone').inputmask({ alias: "phone", "clearIncomplete": true });

$(function() {
  $('input[type="tel"]').inputmask({ alias: "phone", "clearIncomplete": true });
});
<label for="phone">Phone</label>
    <input name="phone" type="tel">

<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
<script src="https://cdn.jsdelivr.net/gh/RobinHerbots/Inputmask@3.3.7/dist/inputmask/inputmask.js"></script>
<script src="https://cdn.jsdelivr.net/gh/RobinHerbots/Inputmask@3.3.7/dist/inputmask/inputmask.extensions.js"></script>
<script src="https://cdn.jsdelivr.net/gh/RobinHerbots/Inputmask@3.3.7/dist/inputmask/inputmask.numeric.extensions.js"></script>
<script src="https://cdn.jsdelivr.net/gh/RobinHerbots/Inputmask@3.3.7/dist/inputmask/inputmask.date.extensions.js"></script>
<script src="https://cdn.jsdelivr.net/gh/RobinHerbots/Inputmask@3.3.7/dist/inputmask/inputmask.phone.extensions.js"></script>
<script src="https://cdn.jsdelivr.net/gh/RobinHerbots/Inputmask@3.3.7/dist/inputmask/jquery.inputmask.js"></script>
<script src="https://cdn.jsdelivr.net/gh/RobinHerbots/Inputmask@3.3.7/dist/inputmask/phone-codes/phone.js"></script>

https://github.com/RobinHerbots/Inputmask#aliases

我开始使用这个插件。它运行良好,并且是最新的。感谢分享。
2021-05-16 14:29:11