控制input输入框只输入数字并且enter键时提交


title: 控制input输入框只输入数字并且enter键时提交
date: 2017-06-23 17:49:05
tags: input enter


这两天关于项目中列表排序的的问题,php程序员建议在表格中增加input输入框order字段,来作为输入提交给每行数据进行排序。

关于这个之前大概也有做过,所以便有了下面的思路。

键盘控制输入类型只能为数字,以及小键盘的数字,当输入为中文时,keydown事件匹配中文后对文本进行字符串替换;当键盘触发enter按键时,提交input框中的文本,或者input框失去焦点时,也提交;但是最后有一个bug,就是当正在输入中文时切换输入法,那么输入会变为字母并且enter提交,对于这个暂时未有合适的办法。后续可以解决时候再更新本文。

代码如下,可以参考
/**
 * table cell number order property
 */
$(function(){
    //网站管理 - 新闻 活动 底部链接 输入order值排序
    $(document).on("keydown keyup press change","input[table-cell-number=true]",function(e){
        var _input = $(this); 
        var c = e.keyCode || e.charCode;
        var r = checkKeyResult(_input,c);
        // console.log(r+'--');
        if(r){
            if(r && r == 13){
                attrSort($(this),$(this).val(),iorderCallback);
            }
        }else{
            e.preventDefault();
        }
    })
    $(document).on("blur","input[table-cell-number=true]",function(e){
        attrSort($(this),$(this).val(),iorderCallback);
    })
    function attrSort(obj,val,callbackFun){
        //is empty submit or don't
        var _this = obj;
        var _sort = _this.attr("attr-sort");
        var _id = _this.attr("attr-id");

        var _val = $.trim(val)=='' ? 0:val;
            if(_val==_sort){
                //没改变
                return false;
            }else{
                //已改变 ajax提交
                return callbackFun(_id,_val);
            }
    }
    function checkKeyResult(that,c){
        if((c >=48 && c <= 57)||(c >= 96 && c <= 105)){
            // console.log(c+'数字');
            return true;
        }else if(c == 8){
            // console.log(c+'栅格');
            return true;
        }else if(c == 13){
            // console.log(c+'enter');
            return 13;
        }else{
            // console.log(c+'中文或字符');
            that.val(that.val().replace(/[\u4e00-\u9fa5]/g, ''));
            return false;
        }
    }
    //------------------
})

后续会再次更新。


你可能感兴趣的:(控制input输入框只输入数字并且enter键时提交)