如何使用 CSS(或 jQuery,如有必要)限制输入 HTML 输入的字符数?

How can I restrict the number of characters entered into an HTML Input with CSS (or jQuery, if necessary)?

我可以根据另一个控件的状态来操作一个控件,如 this jsfiddle 所示,其中复选框的状态会改变文本框的宽度和背景颜色。

HTML是:

<input type="checkbox" id="ckbxEmp" >czech Bachs
<input type="text" id="txtbxSSNOrITIN">

jQuery是:

$(document).on("change", '[id$=ckbxEmp]', function () {
    if ($(this).is(":checked")) {
        $('[id$=txtbxSSNOrITIN]').css('background-color', '#ffff00');
        $('[id$=txtbxSSNOrITIN]').css('width', '24');
    } else {
        $('[id$=txtbxSSNOrITIN]').css('background-color', 'green');
        $('[id$=txtbxSSNOrITIN]').css('width', '144');
    }
}); 

但除此之外,我真正需要做的是根据复选框的状态来限制用户在文本框中输入的字符数。我该怎么做,最好使用 CSS,但如有必要,jQuery?

jsFiddle

首先,设置 maxlength 如:<input type="text" id="txtbxSSNOrITIN" maxlength="5">

$(document).on("change", '[id$=ckbxEmp]', function () {

    var ckd = this.checked;                        // ckd is now a boolean 
    $('[id$=txtbxSSNOrITIN]')
        .attr("maxlength", ckd? 2 : 5)             // 2 characters if checked, else 5
        .css({
            background: ckd? '#ffff00' : "green",  // yellow if checked, else green
            width: ckd? 24 : 144                   // 24px if checked, else 144
        });

}); 

上面还有一个较小的问题,那就是如果用户最初输入超过 5 个字符,如果您单击复选框,值长度仍然是 5!所以你需要一个额外的条带,以删除不需要的字符,如:

$(document).on("change", '[id$=ckbxEmp]', function () {

    var ckd = this.checked;
    $('[id$=txtbxSSNOrITIN]').attr("maxlength", ckd? 2 : 5).css({
       background: ckd? '#ffff00' : "green",
       width: ckd? 24 : 144
    }).val(function(i, v){
       // If checked, slice value to two characters:
       return ckd && v.length>2 ? v.slice(0,2) : v;
    });

}); 

如果您想 go-pro 使用您构建的代码,您可能还需要
防止用户感到愚蠢
通过存储最后一个(长的)键入的值。如果用户单击复选框,然后意识到 "well... that was stupid",通过再次勾选它 off,他应该取回旧值:

jsFiddle

$(document).on("change", '[id$=ckbxEmp]', function () {   

    var ckd = this.checked;
    var $input = $('[id$=txtbxSSNOrITIN]');
    if(ckd) $input.data("oldValue", $input.val() ); // Remember the current value

    $input.prop("maxlength", ckd? 2 : 5).css({
        background: ckd? '#ffff00' : "green",
        width: ckd? 24 : 144
    }).val(function(i, v){
        // If checked, slice value to two characters:
        return ckd && v.length>2 ? v.slice(0,2) : $input.data("oldValue");
    });

}); 

使用 CSS 无法做到这一点。只需通过 jQuery

maxlength 属性添加到输入字段
$(document).on("change", '[id$=ckbxEmp]', function () {
    if ($(this).is(":checked")) {
        $('[id$=txtbxSSNOrITIN]').css('background-color', '#ffff00');
        $('[id$=txtbxSSNOrITIN]').attr('maxlength', '24');
    } else {
        $('[id$=txtbxSSNOrITIN]').css('background-color', 'green');
        $('[id$=txtbxSSNOrITIN]').attr('maxlength', '144');
    }
}); 

您这样做与更改样式相同:

$('#txtbxSSNOrITIN').attr('maxlength', '2');

另请注意我是如何替换 select 或 #txtbxSSNOrITIN 的。这是通过 id.

select 的一种更好更快的方法
$('#txtbxSSNOrITIN').attr('maxlength', '10');

如果未选中该复选框,则会发生这种情况(仅作为示例)

如果 maxlength 属性受到限制,请不要忘记截断用户输入的值

$('#txtbxSSNOrITIN').val($('#txtbxSSNOrITIN').val().substr(0,2));

这发生在 if 块中。此处您的 fiddle 已修改:

http://jsfiddle.net/jy6t5oru/7/

我认为 CSS 不可能。

jquery/javascript 方法会在输入字段中设置一个默认的最大长度,然后在复选框事件中更改它的属性。然后可以将数值绑定到 CSS 属性.

$('[id$=txtbxSSNOrITIN]').attr("maxlength", adjustedInputLengthVal );

如果您要缩小到更短的长度,还必须裁剪文本。

参考: Can I specify maxlength in css?

如果你不介意的话。采取我的方法:maxlength

<input type="text" maxlength="10" />