element+vue表格点击变成输入框并获取焦点(可编辑状态)

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210225141037206.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80OTg2NjAyOQ==,size_16,color_FFFFFF,t_70

在这里插入图片描述

完整html内容

      <!-- 表格 -->
      <el-table class="table"
                stripe
                border
               :header-row-style="{'font-size':'14px',padding:'0px'}"
               :row-style="{'font-size':'14px',padding:'0px',height:'30px'}"
               :cell-style="{padding:'0px'}"
                v-if="deliverGoodsruleForm.state==1"
                @cell-click="cellClick"
                :row-class-name="tableRowClassName"
                :cell-class-name="tableCellClassName"
                :data="deliverStateList"
                highlight-current-row
                style="width: 100%">
        <el-table-column v-for="(val, i) in shipStatusList"
                         :fixed="i == 0"
                         :key="i"
                         :label="val.name"
                         :min-width="val.w"
                         align="center">
          <template slot-scope="scope">
            <div v-if="scope.row.index === rowIndex && scope.column.index === columnIndex &&scope.column.label == '可发货数量'"
                 class='inputnum'>
              <el-input v-model="scope.row[val.value]"
                        ref='editInput'
                        type="number"
                        size="mini"
                        @blur="inputBlur(scope)" />
            </div>
            <div class="inputnum"
                 v-else>{{ scope.row[val.value] }}</div>
          </template>
        </el-table-column>
      </el-table>

data中定义内容

	  rowIndex: -1, //行索引
      columnIndex: -1, //列索引
      currentPage: 1,
      pageSize: 10,
      total: 0,
      theadList: [
        { name: '合同编号', value: 'contractNo', w: '110' },
        { name: '合同简码', value: 'contractShortCode', w: '100' },
        { name: '订单号', value: 'purchaseOrderCode', w: '100' },
        { name: '业主单位', value: 'ownerUnitName', w: '170' },
        { name: '物料编码', value: 'materialCode', w: '100' },
        { name: '物料名称', value: 'materialName', w: '150' },
        { name: '物料描述', value: 'materialDescription', w: '100' },
        { name: '供应商名称', value: 'supplierName', w: '180' },
        { name: '订单数量', value: 'orderQuantity', w: '100' },
        { name: '提单数量', value: 'totalLadingNumber', w: '80' },
        { name: '在途数量', value: 'transitQuantity', w: '80' },
        { name: '到厂数量', value: 'arrivalsQuantity', w: '80' },
        { name: '未发货数量', value: 'unShippedQuantity', w: '100' },
        { name: '发货状态', value: 'deliveryStatusStr', w: '80' },
        { name: '可发货数量', value: 'shippedQuantity', w: '100' },
        { name: '到港时间', value: 'toPortDate', w: '170' },
        { name: '订单状态', value: 'orderStatusStr', w: '100' },
        { name: '要求供货日期', value: 'requestDeliveryDate', w: '160' },
        { name: '订单完成日期', value: 'orderCompletionDate', w: '160' },
        { name: '交货地址', value: 'deliveryAddress', w: '100' },
      ],
      dataList: [{
        createTime: "2021-02-23 17:30:13"
		createUserCode: "80600096"
		delFlag: 0
		email: "xxo@yh-js.cn"
		forwarderShippedQuantity: 69
		id: "1364145528022151170"
		legalName: "申xx"
		name: "湖南xxxx科技有限公司"
		orderId: "1364144342464376834"
		sapCode: "80xx74"
		status: "2"
		statusName: "正式供应商"
		telNumber: "136xxxxx154"
		transportWay: 1
		transportWayStr: "铁路运输"
		updateTime: "2021-02-25 14:10:00"
		updateUserCode: "801xx293"
		}
		{
		createTime: "2021-02-23 17:30:17"
		createUserCode: "80600096"
		delFlag: 0
		email: "zhongyuxian@hotmail.com"
		forwarderShippedQuantity: 88.88
		id: "1364145545109745665"
		legalName: "梁x"
		name: "柳州xxxx有限公司"
		orderId: "1364144342464376834"
		sapCode: "802966"
		status: "2"
		statusName: "正式供应商"
		telNumber: "134xxxxx698"
		transportWay: 2
		transportWayStr: "水路运输"
		updateTime: "2021-02-25 14:10:00"
		updateUserCode: "801xxx93"}
      ],

js内容根据需求可自行调整

methods: {
        //把每一行的索引加到行数据中
        tableRowClassName({ row, rowIndex }) {
      	  row.index = rowIndex
         },
         //把每一列的索引加到列数据中
        tableCellClassName({ column, columnIndex }) {
       	  column.index = columnIndex
     	 },
     	 //单元格被点击时会触发该事件
     	cellClick(row, column, cell, event) {
  		    // console.log(row, '单条数据', column, '列信息', cell, 'td实例', event)
   			 if (column.label == '可发货数量') {
             this.rowIndex = row.index
		     this.columnIndex = column.index
             this.$nextTick(() => {
              this.$refs['editInput'][0].focus()//没有没有自动聚焦效果的话可能是这里出现问题 需要打印出来看一下
              //console.log(this.$refs['editInput'])
        })
      }
    },
  		  //输入框失去焦点事件(初始化中间变量)
  		inputBlur(scope) {
    	  this.rowIndex = -1
  		  this.columnIndex = -1
    },
        }
  • 19
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
你可以使用 Vue 的指令 `v-if` 和 `v-show` 来实现表格点击变为输入框,和光标移动输入框变为文本框的功能。 首先,你需要在表格添加一个点击事件监听器,将其绑定到一个方法上。在这个方法,你可以使用 `v-if` 指令来切换表格单元格和输入框显示状态。当表格单元格被点击时,将其隐藏并显示输入框;当输入框失去焦点时,将其隐藏并显示表格单元格。 接下来,你需要在输入框添加一个输入事件监听器,将其绑定到另一个方法上。在这个方法,你可以使用 `v-show` 指令来切换输入框和文本框的显示状态。当用户在输入框开始输入时,将其隐藏并显示文本框;当用户在文本框点击时,将其隐藏并显示输入框。 下面是一个简单的示例代码: ``` <template> <table> <tbody> <tr> <td v-if="!editing" @click="startEditing">{{ value }}</td> <td v-show="editing"><input type="text" v-model="inputValue" @blur="stopEditing" /></td> </tr> </tbody> </table> </template> <script> export default { data() { return { editing: false, value: '点击输入', inputValue: '', }; }, methods: { startEditing() { this.editing = true; }, stopEditing() { this.editing = false; this.value = this.inputValue; }, }, }; </script> ``` 在这个示例,我们首先定义了一个 `editing` 变量来表示当前单元格是处于编辑状态还是非编辑状态。在单元格被点击时,我们将 `editing` 设置为 `true`,从而显示输入框。在输入框失去焦点时,我们将 `editing` 设置为 `false`,同时将输入框的值赋给 `value`,从而显示文本框。 注意,在这个示例,我们使用了 `v-model` 指令来实现响应式数据绑定。这样,当用户在输入框输入内容时,`inputValue` 的值会自动更新,而当我们将 `inputValue` 的值赋给 `value` 时,`value` 的值也会自动更新。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值