如何计算和限制表单中2个文本字段的文本?

时间:2013-09-09 10:30:05

标签: javascript jquery

我试图计算并限制来自两个文本字段的用户输入。这意味着max char是20,那么用户只能在两个文本字段中输入20个字符。我试过这个

$(document).ready( function() {

jQuery.fn.getLength = function(){
var count = 0;
var max=$("#max").val();
this.each(function(){
   count += jQuery(this).val().length;
     });   
 var rem=max-count;
return rem;
};

var $inputs= jQuery('#left,#right');
$inputs.bind('keyup',function(){
    var remain=$inputs.getLength();
 jQuery('#count').html($inputs.getLength());
    $("#left").keyup(function(){
        if($("#left").val().length > remain){
        $("#left").val($("#left").val().substr(0, remain));
        }
    });

    $("#right").keyup(function(){
        if($("#right").val().length > remain){
        $("#right").val($("#right").val().substr(0, remain));
        }
    });

});

});

但它仅适用于单个文本框,不会从2个字段中获取值。任何帮助请... ..

4 个答案:

答案 0 :(得分:2)

DEMO: http://jsfiddle.net/EEbuJ/2/

JQuery的

$('#left, #right').keyup(function(e) {
    if (maxLen() <= 20)
    {
        // Save the value in a custom data attribute
        $(this).data('val', $(this).val());
    } else {
        // over-ride value with saved data
        $(this).val($(this).data('val'));
    }
});

function maxLen() {
    var x = 0;

    $('#left, #right').each(function() {
        x += $(this).val().length;
    });

    return x;
};

如果指定输入中的字符总数不超过20,则会将输入的输入值保存为自定义数据属性。

当达到最大字符数时,我们停止保存输入的值并将值恢复为我们之前的保存(即小于最大值),有效地撤消该值。

答案 1 :(得分:2)

您需要的只是这段代码,它会检测#left或#right中的按键,如果两者的计数超过20,则删除最后输入的字符

$("#left,#right").keyup(function () {
    var charCount = $('#left').val().length + $('#right').val().length;
    if (charCount > 20) {
        difference = -Math.abs(charCount - 20);
        $(this).val($(this).val().slice(0, difference));
    }
});

演示http://jsfiddle.net/k8nMY/

我的第一个解决方案是在keydown上工作,并使用return false来停止进一步的输入,但这会产生禁用退格键和其他键的效果。

此解决方案在keyup上执行等待,直到按下该键后才计算字符数。如果数字超过20,它将删除最后输入的字符。这样,用户仍然可以按退格键并根据需要进行更改,但不会超过20个字符。

我还进一步修改了脚本,它做的是检测任何更改,例如一根长串的粘贴。它消除了20个字符以上的“差异”。

这应该是问题的完整解决方案。

答案 2 :(得分:0)

它应该很容易:http://jsfiddle.net/4DETE/1/

var textLength =$inputs.eq(0).val().length+$inputs.eq(1).val().length;
if(textLength>=20)
    return false

只计算值的长度,如果您要限制更多元素,请使用jquery.each迭代输入

答案 3 :(得分:0)

我怀疑你能做$inputs.getLength()因为$ inputs是一个数组,因此会返回arraylength:2
您必须在两个输入中加上总符号长度:

$('#left,#right').keydown(function(){
    var leftlength = $('#left').val().length;
    var rightlength = $('#right').val().length;
   if(leftlength + rightlength > 20)
   {
    return false;
   }
});

或缩短

if($('#left').val().length+$('#right').val().length >20){return false;}