当前位置:   article > 正文

element input focus()获取焦点无效?_el-input focus() 未触发

el-input focus() 未触发

有个业务场景需要需要点击表格单元格变成input编辑,点击其他地方input切换成span。

如图:

未编辑状态使用span显示

 编辑状态切换成input

 代码

  1. //html
  2. template v-slot:value="{row}">
  3. <el-input v-if="row.isEdit" placeholder="请输入内容" v-model="row.value" ref="Textinp" clearable @blur="preserve(row)"></el-input>
  4. <span v-show="!row.isEdit" class="valueEdit" @click="valueEdit(row)">{{row.value}}
  5. </span>
  6. </template>
  7. //js
  8. methods:{
  9. // 值编辑
  10. valueEdit(row) {
  11. this.$set(row, "isEdit", true)
  12. this.$nextTick(() => {
  13. this.$refs.Textinp.focus();
  14. })
  15. },
  16. // 值保存
  17. preserve(row){
  18. this.$set(row, "isEdit", false)
  19. },

在这里就出现了一个问题,那就是切换到input的时候 无法自动获取焦点,无法获取焦点的话就没办法点击其他地方关闭。在百度也找了很多办法,都是无效。最终的解决方案就是在html哪里把v-if改成v-show就解决了这个问题。

修改代码

  1. <el-input v-show="row.isEdit" placeholder="请输入内容" v-model="row.value" ref="Textinp" clearable @blur="preserve(row)"></el-input>
  2. <span v-show="!row.isEdit" class="valueEdit" @click="valueEdit(row)">{{row.value}}</span>

ps:如果是多个输入框的话,还是v-if和v-else有效。

pps:如果以上全部方法都无效的话可以试试自定义指令

在data同级定义自定义指令

  1. //js
  2. directives: {
  3. focus: {
  4. inserted: function (el) {
  5. el.querySelector("input").focus()
  6. }
  7. }
  8. },

 使用

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/96525
推荐阅读