iview的表格行内编辑,input和select组件使用方向键切换输入

这篇具有很好参考价值的文章主要介绍了iview的表格行内编辑,input和select组件使用方向键切换输入。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

如果表格中的输入框和下拉框需要实现方向键切换选择,效果如图:
iview的表格行内编辑,input和select组件使用方向键切换输入,vue,view design,iview
使用的是IView的UI框架和Vue2,核心是在输入框和下拉框上添加按键监听事件,监听按键对应方向应该要完成的操作,比如当前在Name列的第一行,按【向左键】的话,需要鼠标光标在第一行的Addressfocus()

核心代码讲解

keyup按下键盘执行的方法

handleKeyDown(event, row, key, name) {
  // ↑
  if (event.keyCode === 38) {
    // 按向上键需要执行的操作
  }
  // ↓
  if (event.keyCode === 40) {
    // 按向下键需要执行的操作
  }
  // ->
  if (event.keyCode === 39) {
    // 按向右键需要执行的操作
  }
  // <-
  if (event.keyCode === 37) {
    // 按向左键需要执行的操作
  }
},

针对上下方向键,其实就是更改数组的索引值

changeCurrentRow(row, key, type, name) {
  let curIndex = row._index;
  if (type === "+") {
    curIndex = row._index + 1;
  } else {
    curIndex = row._index - 1;
  }
  let changeRow = this.data[curIndex];
  this.$nextTick(() => {
    let e = document.querySelectorAll(`.${key}`)[curIndex];
    e.querySelector(name).focus();
  });
},

完整代码

template模板部分

<template>
  <Table :columns="columns" :data="data">
    <template #input="{ row, column }">
      <div
        :class="column.key"
      >
        <Input
          v-model="row[column.key]"
          @on-keyup="handleKeyDown($event, row, column.key, 'input')"
          @on-blur="changeValue(column, row[column.key], row._index)"
        />
      </div>
    </template>
    <template #select="{ row, column }">
      <Select
        :class="column.key"
        filterable
        @keyup="handleKeyDown($event, row, column.key, '.ivu-select-input')"
        @on-change="changeSelect(column, row[column.key], row._index, row)"
        clearable
        v-model="row[column.key]"
        :placeholder="`请选择${column.title}`"
      >
        <Option
          v-for="item in selectOption"
          :key="item.value"
          :value="item.value"
          :label="item.label"
        />
      </Select>
    </template>
  </Table>
</template>

javascript部分文章来源地址https://www.toymoban.com/news/detail-544377.html

<script>
export default {
  data() {
    return {
      selectOption: [
        {
          value: "1",
          label: "四川省",
        },
        {
          value: "2",
          label: "广东省",
        },
      ],
      columns: [
        {
          title: "Name",
          key: "name",
          slot: "input",
        },
        {
          title: "Age",
          key: "age",
        },
        {
          title: "Address",
          key: "address",
          slot: "select",
        },
        {
          title: "Remark",
          key: "remark",
          slot: "input",
        },
      ],
      data: [
        {
          name: "John Brown",
          age: 18,
          address: "1",
          remark: "",
        },
        {
          name: "Jim Green",
          age: 24,
          address: "2",
          remark: "",
        },
        {
          name: "Joe Black",
          age: 30,
          address: "1",
          remark: "",
        },
        {
          name: "Jon Snow",
          age: 26,
          address: "1",
          remark: "1",
        },
      ],
    };
  },
  methods: {
    changeValue(column, val, index) {
      this.data[index][column.key] = val;
    },
    changeSelect(column, val, index) {
      this.data[index][column.key] = val;
    },
    handleKeyDown(event, row, key, name) {
      // ↑
      if (event.keyCode === 38) {
        if (row._index > 0) {
          this.changeCurrentRow(row, key, "-", name);
        }
      }
      // ↓
      if (event.keyCode === 40) {
        if (row._index + 2 <= this.data?.length) {
          this.changeCurrentRow(row, key, "+", name);
        }
      }
      // ->
      if (event.keyCode === 39) {
        if (key === "name") {
          this.$nextTick(() => {
            let e = document.querySelectorAll(".address")[row._index];
            e.querySelector(".ivu-select-input").focus();
          });
        } else if (key === "address") {
          this.$nextTick(() => {
            let e = document.querySelectorAll(".remark")[row._index];
            e.querySelector("input").focus();
          });
        }
      }
      // <-
      if (event.keyCode === 37) {
        if (key === "remark") {
          this.$nextTick(() => {
            let e = document.querySelectorAll(".address")[row._index];
            e.querySelector(".ivu-select-input").focus();
          });
        } else if (key === "address") {
          this.$nextTick(() => {
            let e = document.querySelectorAll(".name")[row._index];
            e.querySelector("input").focus();
          });
        }
      }
    },
    changeCurrentRow(row, key, type, name) {
      let curIndex = row._index;
      if (type === "+") {
        curIndex = row._index + 1;
      } else {
        curIndex = row._index - 1;
      }
      let changeRow = this.data[curIndex];
      this.$nextTick(() => {
        let e = document.querySelectorAll(`.${key}`)[curIndex];
        e.querySelector(name).focus();
      });
    },
  },
};
</script>

到了这里,关于iview的表格行内编辑,input和select组件使用方向键切换输入的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Vue+EleMentUI实现el-table-colum表格select下拉框可编辑

    Vue+EleMentUI实现el-table-colum表格select下拉框可编辑

    在进行采购入库的过程中,有必要对表格中的一行进行快速编辑保存,节省时间,提高工作效率!,而不是每次编辑都要弹窗才可编辑 源码:https://gitee.com/charlinchenlin/store-pos 控制是否显示select下拉框 如果showInput的值与当前的inboundId相同,则显示下拉选项,否则显示数据信息

    2024年02月01日
    浏览(18)
  • 【微信小程序】使用iView组件库的ActionSheet组件实现底部选择功能

    【微信小程序】使用iView组件库的ActionSheet组件实现底部选择功能

    要在微信小程序中使用iView组件库的ActionSheet组件,可以按照以下步骤进行: 首先,确保已经引入了iView组件库的样式和脚本文件。可以在app.wxss中引入iView的样式文件: 同时,在页面的js文件中引入iView的脚本文件: 在需要使用ActionSheet的页面中,可以在wxml文件中添加一个触

    2024年02月16日
    浏览(148)
  • 【微信小程序】使用iView组件库中的icons资源

    【微信小程序】使用iView组件库中的icons资源

    要在微信小程序中使用 iView 组件库中的 icons 资源,需要先下载并引入 iView 组件库,并按照 iView 的文档进行配置和使用。 以下是一般的使用步骤: 下载 iView 组件库的源码或使用npm安装 iView 。 在小程序项目的 app.json 文件中添加 iView 组件库的引入配置: 其中, /path/to/iView

    2024年02月16日
    浏览(44)
  • 【已解决】element-ui组件嵌套太多层,导致内部el-input和el-select 等组件无法正常输入解决方案

    如果 element-ui 组件嵌套太多层,可能会导致内部的 el-input 和 el-select 等组件无法正常输入。 出现这种问题通常是由于 z-index 属性设置不正确导致的。 解决这个问题的方法是调整组件的 z-index 属性,使其不会被其他组件覆盖。以下是一个解决方法: 在上面的代码中,我们首先

    2023年04月13日
    浏览(23)
  • React学习时,自己拟定的一则小案例(table表格组件,含编辑)

    React学习时,自己拟定的一则小案例(table表格组件,含编辑)

    某次在Uniapp群看到有人问uniapp如何操作dom元素。 他想对这张表标红的区域,做dom元素获取,因为产品想让红色色块点击时,成为可编辑,渲染1~4月份之间的行程安排。 于是,有小伙伴说让他用position定位这里,点击时使红色色块层级抬高,弄个input上去。 但提问的小伙伴并没

    2024年02月07日
    浏览(6)
  • iview的表格添加筛选功能需要注意的问题

    iview的表格添加筛选功能需要注意的问题

    在 table 中通过给 columns 数据的项,设置 filters ,可进行筛选, filters 接收一个数组。 然后再指定一个筛选函数 filterMethod 才可以进行筛选, filterMethod 传入两个参数 value 和 row 。 如果指定 filterMultiple: false ,则只能单选,默认为多选。 注意,筛选并不会影响到表格的源数据

    2024年02月16日
    浏览(9)
  • View UI Plus (iview)表格单选实现教程

    View UI Plus (iview)表格单选实现教程

    View UI Plus 是 View Design 设计体系中基于 Vue.js 3 的一套 UI 组件库,主要用于企业级中后台系统 View UI,即原先的 iView,从 2019 年 10 月起正式更名为 View UI,并使用全新的 Logo View UI Plus 实现表格单选,这里需要用到 render 函数,实现的思路是使用render函数自定义表格列为单选框或

    2024年02月09日
    浏览(14)
  • 修改iview的表格table展开的默认icon和样式

    修改iview的表格table展开的默认icon和样式

    修改前 修改后 修改内容

    2024年01月19日
    浏览(12)
  • ElementUI table表格组件实现双击编辑单元格失去焦点还原,支持多单元格

    ElementUI table表格组件实现双击编辑单元格失去焦点还原,支持多单元格

    在使用ElementUI table表格组件时有时需要双击单元格显示编辑状态,失去焦点时还原表格显示。 实现思路: 在数据中增加 isFocus:false .控制是否显示 在table中用 @cell-dblclick 双击方法 先看效果: 上源码:在表格模板中用scope.row.isFocus focusLabelName==\\\'姓名1控制多个单元格显示 方法:

    2024年02月21日
    浏览(12)
  • Vue+element实现el-table行内编辑并校验

    Vue+element实现el-table行内编辑并校验

    el-table行内编辑情况情况概要:之前在开发过程中对于element数据的新增,修改,删除。一般直接结合el-form使用。也就是新增的时候点新增然后出来一个弹框,里面嵌套一个表单,然后保存就好了。这次项目中要求所有的新增,修改,删除功能加在表格中,实现行内编辑功能。

    2024年02月15日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包