最终效果如下



实现要求:

  1. 如果输入的内容不是非负整数,那么提示报错,并且将值变为输入前的内容;
  2. 如果输入正确,则当输入的内容发生改变并且失去焦点以后,触发事件,重新获取列表;

实现思路

  1. 使用原生的input框,更容易控制;
  2. 当输入框获取焦点以后,保存原始值;
  3. 监听回车点击事件与change事件,判断输入的值是否满足条件:
    • 如果满足条件,那么就根据输入的内容更新内容,并且重新获取列表内容;
    • 如果不满足条件,报错,同时通过操作dom,将inputvalue值进行改变;

html部分

1. 代码部分

  1. <el-table-column align="center" style="width:20%" label="排序">
  2. <template slot-scope="scope">
  3. <input type="text" maxlength="2" class="order-input" @keyup.enter.native="handleChangeOrder($event, scope.row, $event.target.value)"
  4. @change="handleChangeOrder($event, scope.row, $event.target.value)" :value="scope.row.orderNum" @focus="saveTemp(scope.row.orderNum)">
  5. </template>
  6. </el-table-column>
  • 通过@focus这个事件,将原始值保存起来
  • 通过@keyup.enter.native@change这两个事件,触发判断输入的内容是否合理,其中我们可以通过传入的$event获取到需要的dom$event.target就是输入框对应的input标签),同时通过$event.target.value传入输入框里面的内容;

2. 注意部分

  • 不要使用v-modelel-input组合,采用原生input标签,可能更灵活。因为当使用v-model(如下面的这种类型)时,如果判断输入错误以后,尽管可以通过操作dom,使inputvalue值发生改变,但是通过v-model绑定的内容依旧为我们输入的错误内容,也就是说当我们下次获取焦点时,如果保存的是v-model的内容,那么将是上次输入的错误信息;
  1. <el-input ... v-model="scope.row.orderNum" @focus="saveTemp(scope.row.orderNum)"></el-input>
  • 这儿再啰嗦一句,v-model绑定的内容,是通过@input输入的内容,无法通过js进行触发,也就是说无法通过jsv-model绑定的内容变为以前的内容(仅仅指el-table里面通过scope.row绑定的数据)

js部分

1. 代码部分

  1. handleChangeOrder(event, row, orderNum) {
  2. if (!isPositiveNum(+orderNum)) {
  3. event.target.value = this.orderTemp;
  4. this.$message({
  5. message: '请输入非负整数',
  6. type: 'warning'
  7. });
  8. return
  9. }
  10. ...
  11. this.put(); // 这儿是update
  12. ...
  13. this.getList(); // 这儿是重新获取列表
  14. ...
  15. },
  16. saveTemp (value) {
  17. this.orderTemp = value;
  18. }

2. 注意部分

isPositiveNum() 为引入的判断是否是非负整数的函数

  1. export function isPositiveNum (s) {
  2.  var re = /^(0|[1-9]\d*)$/ ;
  3.  return re.test(s);
  4. }

基于Element-UI的el-table,input框输入实现排序功能的更多相关文章

  1. 基于element UI 的上传插件

    为了不再重复的上传文件,做了一个统一选择文件和上传文件的 基于 element UI :http://element-cn.eleme.io 前端实现文件下载和拖拽上传 演示 用法 <uploa ...

  2. js input框输入1位数字后自动跳到下一个input框聚焦

    // input框输入1位数字后自动跳到下一个input聚焦 function goNextInput(el){ var txts = document.querySelectorAll(el); f ...

  3. input框输入金额显示千分位

    比如输入:1000000,则显示为1,000,000(或者是保留3位小数:1,000,000.000) 知识点: 1)JavaScript parseFloat() 函数: 定义:parseFloat ...

  4. js控制input框输入数字时,累计求和

    input框输入数字时,自动开始计算累加 <div class="form-group"> <label for="inputPassword3&quo ...

  5. input框输入手机号码分隔显示

    在input框输入手机号码时,自动加入空格按照3,4,4位显示,如: 实现方法如下: <label>手机号码</label><input type="text& ...

  6. element ui源码解析 -- input篇

    el-input是element ui中使用最频繁的组件之一了,分析其构成从四个方面入手:DOM结构,属性,样式,事件入手 DOM结构: <div> <input /> < ...

  7. 基于element ui的图片预览插件

    写插件很简单,满足两个条件即可,一.基本的逻辑思路,二.熟悉插件语法要求.本次Vue插件也比较简单,点击“查看图片”用轮播的方式限制用户上传的图片,如图: 项目采用的是vue-element-admi ...

  8. 模拟邮箱输入邮箱地址、收藏标签。input框输入内容后回车,内容显示成小方块并带删除按钮。

    模拟邮箱输入邮箱地址.收藏标签: 文本框输入文字后按回车键或者分号键,输入框中的文字变成小块并带删除按钮和操作. 页面代码: <!DOCTYPE html> <%@ page lan ...

  9. 解决模糊查询问题 element UI 从服务器搜索数据,输入关键字进行查找

    做项目是遇见下拉框的形式,后台返回来3万多条,用element UI中的select选择器中的搜索还是会造成页面卡顿和系统崩溃,因此用了它的远程搜索功能,发现还不错,解决了这个问题. 代码1 < ...

随机推荐

  1. 我的vscode配置 利用Settings Sync一键安装

    { "prettier.eslintIntegration": true, // 点击保存时,根据 eslint 规则自定修复,同时集成 prettier 到 eslint 中 & ...

  2. linux每日命令(1):gzip命令

    gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用. gzip不仅可以用来压缩大的.较少使用的文件以节省磁盘空间,还可以和tar命令一起构成Linux操作系统中比较流 ...

  3. 清除浮动的方法(float)

    方式一: 额外标签法:给浮动的元素后面新增加一个清除浮动的盒子 例如: <div style="float: left">浮动盒子</div> <di ...

  4. 2018-2-13-win10-uwp-iot

    title author date CreateTime categories win10 uwp iot lindexi 2018-2-13 17:23:3 +0800 2018-2-13 17:2 ...

  5. linux hg 查看当前提交的所有版本及注释

    linux hg 查看当前提交的所有版本及注释? linux hg 查看当前提交的所有版本及注释? linux hg 查看当前提交的所有版本及注释? 回答: hg log

  6. BCZM: Chapter 1

    1.1 CPU 占用率 https://www.cnblogs.com/TenosDoIt/p/3242910.html 1.2 中国象棋将帅 https://blog.csdn.net/kabini ...

  7. laravel 关掉debug

    修改.env文件 APP_DEBUG=false 然后把Laravel服务重启一下

  8. 利用reduce方法,对数组中的json对象去重

    数组中的json对象去重 var arr = [{ "name": "ZYTX", "age": "Y13xG_4wQnOWK1Q ...

  9. thinkphp 储存驱动

    存储驱动完成了不同环境下面的文件存取操作,也是ThinkPHP支持分布式和云平台的基础. 默认的存储驱命名空间位于Think\Storage\Driver,每个存储驱动必须继承Think\Storag ...

  10. NX二次开发-算法篇-vector函数排序(例子:遍历所有点并排序)

    NX9+VS2012 #include <uf.h> #include <uf_ui.h> #include <uf_curve.h> #include <u ...