如何在手动输入时限制html5数字输入的最大值

时间:2015-11-22 10:46:16

标签: javascript jquery html5 jqgrid free-jqgrid

自由jqgrid列定义为使用html5数字输入类型,如

{ name: "amount", width: 62, template: "number",
             formatter: "number", formatoptions: {decimalSeparator:",", thousandsSeparator: " ", decimalPlaces: 4, defaultValue: '0.0000'},
               editoptions: {
                   maxlength; 4
                   type: "number", 
                   max: 9999
               } },

允许从大于9999的键盘输入数字。 max: 9999仅影响使用微调器的输入。

如何解决此问题,以便键盘输入不能超过9999?

testcase位于

http://jsfiddle.net/jhckz7rr/3/

它允许在Amount列中手动输入大于9999的数字。如何限制手动输入到9999? 我还尝试使用字符串最大值max: '9999',但问题仍然存在。

big

如果输入类型是文本,则输入将遵循maxlength值。

2 个答案:

答案 0 :(得分:1)

尝试使用以下内容

{
    name: "amount",
    width: 62,
    template: "number", // formatter: "number"
    formatoptions: {
        decimalSeparator: ",",
        thousandsSeparator: " ",
        decimalPlaces: 2,
        defaultValue: "0,00"
    },
    editoptions: {
        maxlength: 7,
        type: "number",
        max: "9999",
        dataEvents: [
            {
                type: "blur",
                fn: function (e) {
                        if (e.target.checkValidity()) {
                            $(e.target).removeClass("ui-state-error");
                        } else {
                            $(e.target).addClass("ui-state-error");
                            alert(e.target.validationMessage);
                            $(e.target).focus();
                        }
                    }
            }
        ]
    }

}

上述代码调用checkValidity() <input type="number">方法。因为您需要在代码中包含其他测试,例如e.target.checkValidity是一个函数的验证(对于在旧的Web浏览器中执行的情况)和其他一些。上面的代码只显示了使用<input type="number">

功能的验证的主要思想

请参阅演示http://jsfiddle.net/OlegKi/jhckz7rr/8/,它适用于内联编辑和表单编辑。

答案 1 :(得分:0)

使用jQuery创建输入验证。

事件侦听器在编辑单击时附加,并在保存单击时删除。 我使用setTimeout,与free-jqgrid元素操作同步 - 正确的解决方案是扩展free-jqgrid功能

function restrictMax(){

    var max = parseFloat($(this).attr('max'))
    var value = parseFloat($(this).val())
    if($(this).val() > max){
        $(this).val(max)
    }
}
setTimeout(function(){
    $('.fa-pencil').click(function(){ //click on edit
        var thatParent = $(this).closest('tr')
        setTimeout(function(){

            thatParent.find('input[type="number"]').on('input',restrictMax)
        },0);
    })
    $('.fa-floppy-o').click(function(){ //click on save
        var thatParent = $(this).closest('tr')
        setTimeout(function(){
            thatParent.find('input[type="number"]').off('input',restrictMax)
        },0)
    })

},0)

http://jsfiddle.net/jhckz7rr/6/