vue+element 中 el-input框 限制 只能输入数字及几位小数(自定义)和输入框之键盘

<!-- 下布转数 -->

<el-table-column align="right" width="87px">
    <template slot="header" slot-scope="scope">
        <span class="sort-table-header">下布转数</span>
    </template>
    <template slot-scope="scope">
        <div>
            <el-input
                v-model="scope.row.revolutions_count"
                placeholder="请输入"
                size="mini"
                class="align-right-input count_input table_input"
                @input="changeSalary(scope.row,scope.$index,‘revolutions_count‘)"
                @keyup.native="keyboard($event, scope.$index)"
            ></el-input>
        </div>
    </template>
</el-table-column>

<!-- 保底转数 -->
<el-table-column v-if="wage_scheme != 3" align="right" width="87px">
    <template slot="header" slot-scope="scope">
        <span class="sort-table-header">保底转数</span>
    </template>
    <template slot-scope="scope">
        <div>
            <el-input
                v-model="scope.row.overproduction"
                placeholder="请输入"
                size="mini"
                class="align-right-input over_input table_input"
                @input="changeSalary(scope.row,scope.$index,‘overproduction‘)"
                @keyup.native="keyboard($event, scope.$index)"
            ></el-input>
        </div>
    </template>
</el-table-column>

<!-- 单价(元/转) -->
<el-table-column v-if="wage_scheme != 3 || price_mode !=0" align="right" width="87px">
    <template slot="header" slot-scope="scope">
        <span class="sort-table-header">单价(元/转)</span>
    </template>
    <template slot-scope="scope">
        <div>
            <el-input
                v-model="scope.row.revolution_price"
                placeholder="请输入"
                size="mini"
                class="align-right-input revolution_input table_input"
                @input="changeSalary(scope.row,scope.$index,‘revolution_price‘)"
                @keyup.native="keyboard($event, scope.$index)"
            ></el-input>
        </div>
    </template>
</el-table-column>

<!-- 保底工资 -->
<el-table-column
    v-if="wage_scheme == 1 && price_mode ==1 || wage_scheme == 2 && price_mode ==1"
    align="right"
    width="87px"
>
    <template slot="header" slot-scope="scope">
        <span class="sort-table-header">保底工资</span>
    </template>
    <template slot-scope="scope">
        <div>
            <el-input
                v-model="scope.row.knit_loom_price"
                placeholder="请输入"
                size="mini"
                class="align-right-input knit_input table_input"
                @input="changeSalary(scope.row,scope.$index,‘knit_loom_price‘)"
                @keyup.native="keyboard($event, scope.$index)"
            ></el-input>
        </div>
    </template>
</el-table-column>

<!-- 加机费 -->
<el-table-column v-if="wage_scheme == 1 && price_mode ==1" align="right" width="87px">
    <template slot="header" slot-scope="scope">
        <span class="sort-table-header">加机费</span>
    </template>
    <template slot-scope="scope">
        <div>
            <el-input
                v-model="scope.row.add_machine_reward"
                placeholder="请输入"
                size="mini"
                class="align-right-input add_input table_input"
                @input="changeSalary(scope.row,scope.$index,‘add_machine_reward‘)"
                @keyup.native="keyboard($event, scope.$index)"
            ></el-input>
        </div>
    </template>
</el-table-column>

// 双向绑定 输入框(下布转数、保底转数、单价(元/转)、保底工资、加机费) - 限制输入

changeSalary(row, index, type) {
    this.$nextTick(() => {
        // 先把非数字的都替换掉(空),除了数字和.
        this.clothProduceData[index][type] = this.clothProduceData[index][
            type
        ].replace(/[^\d.]/g, "");
        // 必须保证第一个为数字而不是.
        this.clothProduceData[index][type] = this.clothProduceData[index][
            type
        ].replace(/^\./g, "");
        // 保证只有出现一个.而没有多个.
        this.clothProduceData[index][type] = this.clothProduceData[index][
            type
        ].replace(/\.{3,}/g, "");
        // 保证.只出现一次,而不能出现两次以上
        this.clothProduceData[index][type] = this.clothProduceData[index][type]
            .replace(".", "$#$")
            .replace(/\./g, "")
            .replace("$#$", ".");
        // 限制几位小数
        let subscript = -1;
        for (let i in this.clothProduceData[index][type]) {
            if (this.clothProduceData[index][type][i] === ".") {
                subscript = i;
            }
            if (subscript !== -1) {
                if (i - subscript > this.decimalNum(type)) {
                    this.clothProduceData[index][type] = this.clothProduceData[index][
                        type
                    ].substring(0, this.clothProduceData[index][type].length - 1);
                }
            }
        }
    });
},
// 下布转数、保底转数:整数;单价(元/转):4位小数; 保底工资、加机费:2位小数
decimalNum(type) {
    if (type == "revolutions_count" || type == "overproduction") {
        return -1;
    }
    if (type == "revolution_price") {
        return 4;
    }
    if (type == "knit_loom_price" || type == "add_machine_reward") {
        return 2;
    }
},

// 键盘事件(向上、向下)

keyboard(evt, index) {
    let newIndex;
    let _this = this;
    let ev = evt ? evt : window.event;
    let clssName = ev.target.offsetParent.className;
    if (clssName.indexOf("count_input") != -1) {
        newIndex = index * this.paramNum;
    } else if (clssName.indexOf("over_input") != -1) {
        newIndex = index * this.paramNum + 1;
    } else if (clssName.indexOf("revolution_input") != -1) {
        let num = this.paramNum === 2 ? 1 : 2;
        newIndex = index * this.paramNum + num;
    } else if (clssName.indexOf("knit_input") != -1) {
        newIndex = index * this.paramNum + 3;
    } else if (clssName.indexOf("add_input") != -1) {
        newIndex = index * this.paramNum + 4;
    }
    // 获取每一列input
    let inputAll = document.querySelectorAll(".table_input input");
    let allLength = inputAll.length;
    // 向上
    if (ev.keyCode == 38) {
        if (newIndex <= this.paramNum - 1) {
            return false;
        } else {
            newIndex -= this.paramNum;
        }
        if (inputAll[newIndex]) {
            inputAll[newIndex].focus();
        }
    }
    // 向下
    if (ev.keyCode == 40) {
        if (newIndex >= allLength - this.paramNum) {
            return false;
        } else {
            newIndex += this.paramNum;
        }
        if (inputAll[newIndex]) {
            inputAll[newIndex].focus();
        }
    }
},

因为那五个字段是判断显示的,相应的,paramNum这个参数是一行显示有多少个输入框

clothProduceData是表格绑定的值,也就是tableData

原文地址:https://blog.51cto.com/9161018/2475794

时间: 2024-10-09 23:47:39

vue+element 中 el-input框 限制 只能输入数字及几位小数(自定义)和输入框之键盘的相关文章

JS 只能输入数字和两位小数的JS

最近项目压的喘不过气来,所以都基本不来园子了,手头还有好多事,就不扯淡了,直接上内容 JS代码: 1 function clearNoNum(value){ 2 //清除"数字"和"."以外的字符 3 value = value.replace(/[^\d.]/g,""); 4 5 //验证第一个字符是数字而不是 6 value = value.replace(/^\./g,""); 7 8 //只保留第一个. 清除多余的 9

html或者php中 input框限制只能输入正整数,逻辑与和或运算

有时需要限制文本框输入内容的类型,本节分享下正则表达式限制文本框只能输入数字.小数点.英文字母.汉字等代码. 例如,输入大于0的正整数 代码如下: <input onkeyup="if(this.value.length==1){this.value=this.value.replace(/[^1-9]/g,'')}else{this.value=this.value.replace(/\D/g,'')}" onafterpaste="if(this.value.len

html中radio单选和文本框限制只能输入数字的解决方案

一.当html中存在多个radio单选按钮时将所有的单选按钮name属性设置为一样,就可实现每次只选中一个的效果. 二.限制文本框只能输入数字,代码如下: $(function(){ $(":radio.dian").click(function(){ //单击radio后移除所有的边框样式 $("label").removeClass("bank_border"); if(this.checked){//当radio选中时设置边框样式 $(th

input框限制只能输入正整数,逻辑与和或运算

有时需要限制文本框输入内容的类型,本节分享下正则表达式限制文本框只能输入数字.小数点.英文字母.汉字等代码. 例如,输入大于0的正整数 复制代码代码如下: <input onkeyup="if(this.value.length==1){this.value=this.value.replace(/[^1-9]/g,'')}else{this.value=this.value.replace(/\D/g,'')}" onafterpaste="if(this.value

在文本框里只能输入数字

方法: 键盘输入以后采用的方法: 按下某个键时调用此方法:KeyPressed(KeyEvent e ) 使用此事件,以便不会按照默认的方式处理事件:public void consume() 代码 package cn.idcast2; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.Label; import java.awt.TextField; import java.awt.event.KeyAdap

js限制input框值能输入数字

/** * 限制只能输入数字 * @parem value 输入的值 * @parem select 选择器 * */var htmlObj = {}: htmlObj.isNanNumber = function(value,select){ if (isNaN(value)){ value = value.replace(/[^\d]/g, ''); $("#" + select).val(value); return false; } return true;};

如何在vue+element中实现选择框和穿梭框的根据拼音以及拼音首字母以及汉字的模糊搜索

1.汉字: 直接添加对应的 filterable 2.拼音: 穿梭框和选择器的实现方式有所不同 选择器: <1>下载pinyin-match:   npm i --save pinyin-match <2>在main.js引入并注册为全局属性 import PinyinMatch from 'pinyin-match'; Vue.prototype.$pinyinmatch = PinyinMatch; <3>为需要的选择器添加自定义过滤方法 :filter-metho

使用replace限定只能输入数字,最多有两位小数

只能输入数字和两位小数. 只能输入一个小数点. 第一位不能为小数点. 第一位不能为0(除了0.XX). number为文本框输入值. var inputVal = number.replace(/[^\d.]/g, "").replace(/\.{2,}/g, ".").replace(".", "$#$").replace(/\./g, "").replace("$#$", "

限制input只能输入数字

限制input表单只能输入数字,代码如下: <input type="text" style="ime-mode:disabled;" onkeypress="return (/^(0|[1-9]\d*)$/.test(String.fromCharCode(event.keyCode)))"/> 说明: 1.style="ime-mode:disabled"意为关闭输入法. 2./^(0|[1-9]\d*)$/为