在jquery或javascript中动态设置输入类型文本框的长度

时间:2014-04-18 11:00:08

标签: javascript jquery

在输入类型文本框中获取最多13个数字,但如果用户按下14个数字作为小数,则只允许最多16个数字。

HTML:

<input type="text" maxlength="15" onkeyup="checkCurrency(this)"/>

脚本:

    function checkCurrency(ctrl) {
        ctrl.setAttribute('maxlength', '16');
        var currency = ctrl.value.replace(/[,]+/g, '');
        var valid = /^\d{0,13}(\.\d{0,2})?$/.test(currency),
        val = currency;
        if (valid) {                
            ctrl = val;
        } else {             
            ctrl.setAttribute('maxlength', '13');                
        }
    };   

现在,当第14位是小数(。)时,它可以正常工作,但是请将任意整数放在第14位并查看差异。

6 个答案:

答案 0 :(得分:0)

为什么不将数字转换为字符串,检查一段时间的长度和最后一个子字符串,并相应地调整maxlength

function checkCurrency(ctrl) {
    var x = ctrl.value.toString();
    var size = x.length;
    if (x.substring(size-1) == "." && size >= 14) {
        ctrl.maxlength = 16;
    } else {
        ctrl.maxlength = 13;
    }
}

答案 1 :(得分:0)

试试这个:

HTML code:

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

和jQuery:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>

<script>
$("input").keypress(function(e)
{
    string = $('input').val();
    length = string.length;
    if (length == 13){
        if (e.which == 46){
            $("input").attr('maxlength', 16);
        }
    }
});
</script>

答案 2 :(得分:0)

你可以做这样的事

<强> HTML

<input type="text" id="inp">

<强> JQuery的

    $('input').attr('maxLength','13').keyup(

     function (){
     if(this.value.contains('.'))
         $(this).attr('maxLength','16');
    else
        $(this).attr('maxLength','13');
    });

并且不要忘记添加JQuery引用。

修改: 编辑代码,因为您不希望文本眨眼。

答案 3 :(得分:0)

试试这个..

HTML

<input id="a" type="text" maxlength="15" />

JS

$('#a').keypress(function (event) {
      if ($('#a').val().length < 14) {
          if (event.keyCode != '110' && event.charCode != '46') {
              $('#a').attr('maxlength', '13');
          } else if (event.keyCode == '110' || event.charCode == '46') {
              $('#a').attr('maxlength', '16');
          } 
      }
});

答案 4 :(得分:0)

我从不认为字符串比较比正则表达式测试更好(当它是一个数字问题时(绝对是十进制问题))。 我对用户输入问题很有经验,所以我总是喜欢使用正则表达式来完成这种输入行为,因为它的性能总是快速,可靠,更易于维护。

我做了“输入备份”行为以始终支持最后一次有效插入。因此,对于您的确切需求,这是一个完整的示例(我保留了您的正则表达式):fiddle

jQuery代码

var varRegex = /^\d{0,13}(\.\d{0,2})?$/;
var varLastValidValue = "";

$(function ()
{
    $('#SpecialInput').keyup(function ()
    {
        if (!varRegex.test($(this).val()))
            $(this).val(varLastValidValue);

        else
            varLastValidValue = $(this).val();
    });
});

与其他答案不同,我的优势是只强制使用2个十进制数字(任何位置)。在服务器端,我认为这是必不可少的(我相信这就是你对输入施加限制的原因。你正在反映DataBase中存储数据的格式,对吧!?)。


重要的是请注意,此代码仅适用于1个输入(因为它是)。对于同一页面中的多个输入,一个简单的方法将使用elements属性,或类似的东西来存储“LastValidValue”。

(我知道完美会听'onkeydown'事件,并阻止用户输入。但它会使用更高级的代码,我想让它变得简单)


希望我帮忙!

答案 5 :(得分:0)

我的2美分

HTML

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

JS

$('input').keydown(function (event) {
    $(this).data('previous', $(this).val());
    if ((event.keyCode == 110) || (event.keyCode == 190)) {
        $(this).attr('maxlength', 16);
    }
});
$('input').keyup(function (event) {
    if ( ! /^\d{0,13}(\.\d{0,2})?$/.test($(this).val())) {
        $(this).val($(this).data('previous'));
    }
});

JSFiddle