基于Element-UI的el-table,input框输入实现排序功能
最终效果如下
实现要求:
- 如果输入的内容不是非负整数,那么提示报错,并且将值变为输入前的内容;
- 如果输入正确,则当输入的内容发生改变并且失去焦点以后,触发事件,重新获取列表;
实现思路
- 使用原生的
input
框,更容易控制; - 当输入框获取焦点以后,保存原始值;
- 监听回车点击事件与
change
事件,判断输入的值是否满足条件:- 如果满足条件,那么就根据输入的内容更新内容,并且重新获取列表内容;
- 如果不满足条件,报错,同时通过操作
dom
,将input
的value
值进行改变;
html部分
1. 代码部分
<el-table-column align="center" style="width:20%" label="排序">
<template slot-scope="scope">
<input type="text" maxlength="2" class="order-input" @keyup.enter.native="handleChangeOrder($event, scope.row, $event.target.value)"
@change="handleChangeOrder($event, scope.row, $event.target.value)" :value="scope.row.orderNum" @focus="saveTemp(scope.row.orderNum)">
</template>
</el-table-column>
- 通过
@focus
这个事件,将原始值保存起来 - 通过
@keyup.enter.native
、@change
这两个事件,触发判断输入的内容是否合理,其中我们可以通过传入的$event
获取到需要的dom
($event.target
就是输入框对应的input
标签),同时通过$event.target.value
传入输入框里面的内容;
2. 注意部分
- 不要使用
v-model
与el-input
组合,采用原生input
标签,可能更灵活。因为当使用v-model
(如下面的这种类型)时,如果判断输入错误以后,尽管可以通过操作dom
,使input
的value
值发生改变,但是通过v-model
绑定的内容依旧为我们输入的错误内容,也就是说当我们下次获取焦点时,如果保存的是v-model
的内容,那么将是上次输入的错误信息;
<el-input ... v-model="scope.row.orderNum" @focus="saveTemp(scope.row.orderNum)"></el-input>
- 这儿再啰嗦一句,
v-model
绑定的内容,是通过@input
输入的内容,无法通过js
进行触发,也就是说无法通过js
将v-model
绑定的内容变为以前的内容(仅仅指el-table
里面通过scope.row
绑定的数据)
js部分
1. 代码部分
handleChangeOrder(event, row, orderNum) {
if (!isPositiveNum(+orderNum)) {
event.target.value = this.orderTemp;
this.$message({
message: '请输入非负整数',
type: 'warning'
});
return
}
...
this.put(); // 这儿是update
...
this.getList(); // 这儿是重新获取列表
...
},
saveTemp (value) {
this.orderTemp = value;
}
2. 注意部分
isPositiveNum()
为引入的判断是否是非负整数的函数
export function isPositiveNum (s) {
var re = /^(0|[1-9]\d*)$/ ;
return re.test(s);
}
基于Element-UI的el-table,input框输入实现排序功能的更多相关文章
- 基于element UI 的上传插件
为了不再重复的上传文件,做了一个统一选择文件和上传文件的 基于 element UI :http://element-cn.eleme.io 前端实现文件下载和拖拽上传 演示 用法 <uploa ...
- js input框输入1位数字后自动跳到下一个input框聚焦
// input框输入1位数字后自动跳到下一个input聚焦 function goNextInput(el){ var txts = document.querySelectorAll(el); f ...
- input框输入金额显示千分位
比如输入:1000000,则显示为1,000,000(或者是保留3位小数:1,000,000.000) 知识点: 1)JavaScript parseFloat() 函数: 定义:parseFloat ...
- js控制input框输入数字时,累计求和
input框输入数字时,自动开始计算累加 <div class="form-group"> <label for="inputPassword3&quo ...
- input框输入手机号码分隔显示
在input框输入手机号码时,自动加入空格按照3,4,4位显示,如: 实现方法如下: <label>手机号码</label><input type="text& ...
- element ui源码解析 -- input篇
el-input是element ui中使用最频繁的组件之一了,分析其构成从四个方面入手:DOM结构,属性,样式,事件入手 DOM结构: <div> <input /> < ...
- 基于element ui的图片预览插件
写插件很简单,满足两个条件即可,一.基本的逻辑思路,二.熟悉插件语法要求.本次Vue插件也比较简单,点击“查看图片”用轮播的方式限制用户上传的图片,如图: 项目采用的是vue-element-admi ...
- 模拟邮箱输入邮箱地址、收藏标签。input框输入内容后回车,内容显示成小方块并带删除按钮。
模拟邮箱输入邮箱地址.收藏标签: 文本框输入文字后按回车键或者分号键,输入框中的文字变成小块并带删除按钮和操作. 页面代码: <!DOCTYPE html> <%@ page lan ...
- 解决模糊查询问题 element UI 从服务器搜索数据,输入关键字进行查找
做项目是遇见下拉框的形式,后台返回来3万多条,用element UI中的select选择器中的搜索还是会造成页面卡顿和系统崩溃,因此用了它的远程搜索功能,发现还不错,解决了这个问题. 代码1 < ...
随机推荐
- 我的vscode配置 利用Settings Sync一键安装
{ "prettier.eslintIntegration": true, // 点击保存时,根据 eslint 规则自定修复,同时集成 prettier 到 eslint 中 & ...
- linux每日命令(1):gzip命令
gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用. gzip不仅可以用来压缩大的.较少使用的文件以节省磁盘空间,还可以和tar命令一起构成Linux操作系统中比较流 ...
- 清除浮动的方法(float)
方式一: 额外标签法:给浮动的元素后面新增加一个清除浮动的盒子 例如: <div style="float: left">浮动盒子</div> <di ...
- 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 ...
- linux hg 查看当前提交的所有版本及注释
linux hg 查看当前提交的所有版本及注释? linux hg 查看当前提交的所有版本及注释? linux hg 查看当前提交的所有版本及注释? 回答: hg log
- BCZM: Chapter 1
1.1 CPU 占用率 https://www.cnblogs.com/TenosDoIt/p/3242910.html 1.2 中国象棋将帅 https://blog.csdn.net/kabini ...
- laravel 关掉debug
修改.env文件 APP_DEBUG=false 然后把Laravel服务重启一下
- 利用reduce方法,对数组中的json对象去重
数组中的json对象去重 var arr = [{ "name": "ZYTX", "age": "Y13xG_4wQnOWK1Q ...
- thinkphp 储存驱动
存储驱动完成了不同环境下面的文件存取操作,也是ThinkPHP支持分布式和云平台的基础. 默认的存储驱命名空间位于Think\Storage\Driver,每个存储驱动必须继承Think\Storag ...
- NX二次开发-算法篇-vector函数排序(例子:遍历所有点并排序)
NX9+VS2012 #include <uf.h> #include <uf_ui.h> #include <uf_curve.h> #include <u ...