Vue + el-ui table 内嵌 input 调用 focus 方法无效;this.$refs.xxx.focus()方法无效

这篇具有很好参考价值的文章主要介绍了Vue + el-ui table 内嵌 input 调用 focus 方法无效;this.$refs.xxx.focus()方法无效。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、先说需求

a.在表格编辑态的时候,可以在①处敲击“回车键”,光标能跳转到②处

b.表格可以在浏览态和编辑态切换,用v-show来实现的编辑和浏览

Vue + el-ui table 内嵌 input 调用 focus 方法无效;this.$refs.xxx.focus()方法无效,vue.js,前端,javascript,elementui,ui

2、代码片段(这种方式不生效)

        页面显示代码:

<el-table-column label="产量" prop="ptCn" width="110px" header-align="center" align="center">
    <template slot-scope="scope">
        <div v-show="scope.row.edit">
            <el-input :ref="'ptCn' + scope.row.index" v-model="scope.row.ptCn" @keyup.enter.native="inputFocus('ptCn', scope.row.index)"></el-input>
        </div>
        <div v-show="!scope.row.edit">
            {{ scope.row.ptCn }}
        </div>
    </template>
</el-table-column>

methods方法:

    // 回车点击事件
    inputFocus(flag, index) {
      const nextRow = flag + (++index)

      console.log("refs = ");
      console.log(this.$refs);
      console.log("nextRow = ");
      console.log(this.$refs[nextRow]);

      console.log("光标定位前。。。");
      this.$refs[nextRow].focus();
      console.log("光标定位后。。。");
    },

3、页面效果

Vue + el-ui table 内嵌 input 调用 focus 方法无效;this.$refs.xxx.focus()方法无效,vue.js,前端,javascript,elementui,ui

如图,当在第一行 9999 处敲击回车之后,控制台打印出了this.$refs的所有组件,也打印了定位前和定位后的log日志,且没有报错,说明我们的代码是正确执行了的,但是光标没有变,还是在第一行。

4、百度了以下几个原因,但是改了之后依旧是不管用

Element UI输入框focus()方法自动获取焦点失败处理方法_element focus_冒泡_L的博客-CSDN博客

Vue Element UI input输入框focus()无法获取焦点_vue使用v-show隐藏input框后不再能聚焦_ALL700的博客-CSDN博客

Element UI输入框focus()方法自动获取焦点失败处理方法 - 行业资讯 - 电子产品设计开发与电子技术学习交流!

vue element popover input focus() 不生效 解决办法 | 码农家园

5、分析原因

我又试了一下,当不把<el-input>标签放在<el-table>里的时候,比如正常表单(ref不是通过动态赋值)的时候,这段代码是完全没有问题的。所以问题应该是出在了<el-table>上,不知道Element-ui加了什么限制或者Vue的什么bug,导致的代码执行了,但是光标却没有移动

6、改为原生DOM的方式(自测生效)

页面显示代码:(将 ref 改为 id,其他都没变)

<el-table-column label="产量" prop="ptCn" width="110px" header-align="center" align="center">
    <template slot-scope="scope">
        <div v-show="scope.row.edit">
            <!-- 仅仅是将这里的 ref 改为了 id -->
            <el-input :id="'ptCn' + scope.row.index" v-model="scope.row.ptCn" @keyup.enter.native="inputFocus('ptCn', scope.row.index)"></el-input>
        </div>
        <div v-show="!scope.row.edit">
            {{ scope.row.ptCn }}
        </div>
    </template>
</el-table-column>

methods方法:(将this.$refs 改为 document.getElementById)

    // 回车点击事件
    inputFocus(flag, index) {
      const nextRow = flag + (++index)

      console.log("nextRow = ");
      console.log(document.getElementById(nextRow));

      console.log("光标定位前。。。");
      document.getElementById(nextRow).focus();
      console.log("光标定位后。。。");
    },

页面效果:(在第一行的 9999 处敲击 回车键,此时能正常跳转到第二行的 27447 处)

Vue + el-ui table 内嵌 input 调用 focus 方法无效;this.$refs.xxx.focus()方法无效,vue.js,前端,javascript,elementui,ui

7、总结:

学好HTML,JS,CSS吧(这是基础的基础),无论框架怎么变,底层都是这东西,当发现框架不支持的时候,可以考虑考虑原生的DOM实现。

8、至于为啥this.$refs.xxx.focus() 这个方法不生效,目前还没有研究出来,有知道的大佬欢迎留言在这篇文章的评论区,共勉!文章来源地址https://www.toymoban.com/news/detail-754508.html

到了这里,关于Vue + el-ui table 内嵌 input 调用 focus 方法无效;this.$refs.xxx.focus()方法无效的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Vue+Element-UI 中 el-table 动态合并单元格 :span-method 方法

    记录一下工作时遇到的 el-table 合并单元格的需求,超详细😊 el-table官方提供了合并单元格的方法与返回格式 如下: 根据叙述有了如下思路: 因为后端返回的数据非统一, 可能不是按照类别排好的😨, 所以官网的例子满足不了所有的需求所以我们通过遍历table的数据比较前后两

    2024年02月12日
    浏览(64)
  • element-ui的el-form表单和el-table校验嵌套使用校验el-input和el-select

    场景:前端开发中,经常会遇到比较多的表单填写页面,其中有el-form,el-table,表格的每一列中又嵌套着输入框或者下拉框,然后每个还需要做单独的校验 效果:   点击保存可校验el-input和el-select是否有值,不符合校验规则就标红提醒   1.el-form里面嵌套el-table 2.在el-table-column自定义内

    2024年02月02日
    浏览(48)
  • el-table中的el-input标签修改值,但界面未更新,解决方法

    在el-table中的el-input里面写的change事件根本不触发,都不打印,试了网络上各种方法都没用 然后换成input事件,input事件会触发,但界面也未更新。我在触发事件的时候,生成一个值,用于刷新界面再绑定到el-table上,但会导致界面强制刷新,体验感很差, 解决 把生成的key值绑

    2024年02月06日
    浏览(63)
  • vue element-ui table点击编辑后,变成input、select、date

    最近,在项目上需要table可以行内编辑,在table添加了input、select、时间控件,并且可以保存本行数据,当你点击编辑时,table的列就会变成相对应的input、select和时间控件,点击保存时,需要调用后台接口把本行的数据传个后台。 参考网站:https://www.codenong.com/cs106360465/

    2024年02月12日
    浏览(51)
  • vue使用element-ui,el-table不显示

    例如:新增了一个表格,按官网代码贴过来的,结果一直不显示 代码如下一模一样,其他数据正常显示,就表格不显示 其实版本库不一致导致的,贼坑,又不提示 先卸载element-ui安装一个低版本的element-ui就可以解决``

    2024年02月11日
    浏览(60)
  • Vue中@change、@input和@blur、@focus的区别及@keyup介绍

    @change在输入框发生变化且失去焦点后触发; @input在输入框内容发生变化后触发(在界面加载数据以前) @blur失去焦点就触发 @focus获得焦点就触发 注意: @change先于@blur @input和change的默认参数为输入内容,而blur的默认参数为dom节点。 在搜索下拉框选择数据后,即刻搜索的案

    2024年02月20日
    浏览(35)
  • element-ui中使用el-table ,el-table-column循环列发现列错乱解决方法

    由于 需要动态循环列展示表格 而不得不 套一层div 标签时会造成表格列错乱的想象,这是因为el-table中不允许有除el-table-column标签以外的元素。 1、 或许你可以试试使用template 标签包裹 2、把div标签删了,不用它包裹 3、再循环前多加一行宽度为1的列 el-table-column 前面的两种方

    2024年02月11日
    浏览(55)
  • vue(element ui )el-table树形表格展示及数据对齐

    注意点: el-table配置里 row-key 必须是唯一性 :tree-props=“{ children: ‘relatedPartyChild’ , hasChildren: ‘hasChildren’ }” children配置为后端返回的节点字段即可

    2024年02月16日
    浏览(46)
  • vue中element-ui表格组件el-table封装,在table表格中插入图片

            这次写的项目是写后台管理系统这部分,对于后台管理使用vue写,用组件的话,table组件用得次数比较多,可以封装一个table组件。         1.如封装的table组件:  :prop=\\\"item.prop\\\"  :label=\\\"item.label\\\"是必须要有的,其他的可以根据自己需要写 。 2.封装之后是就是使

    2024年02月15日
    浏览(51)
  • vue element-ui el-input输入框绑定@keyup.enter回车事件无效

    由于element-ui把input进行了封装,input外面是多一层div的。 在element-ui里有很多因为自身封装了几层标签导致事件和样式无法按想要的效果呈现,遇到后可以在网页中查看dom结构分析原因。 所以对于el-input,使用 @keyup.enter是无效的,需要加上 .native 限制符 .native修饰符的作用:

    2024年02月16日
    浏览(51)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包