el-input设置自动聚焦this.$refs.xxx.focus is not a function报错

碰到一个需求,在<el-input ref="promptInput" type="textarea">中,使用

this.$nextTick(() => {
this.$ref.promptInput.focus();
});

出现了报错。

具体报错为

this.$refs.promptInput.focus is not a function

打印一下this.$refs.promptInput发现有值,但是找不到focus方法

问题在于直接给el-input绑定一个ref取到的是textarea外面的那层div
并没有真正的拿到textarea

分析一下 this.$refs.promptInput 的打印值,外面的那层div只有change,input,blur方法,focus是直接绑在textarea上面的

实测正确的写法为:

this.$nextTick(() => {
            this.$refs?.promptInput?.$children[0]?.$refs?.textarea?.focus();
        });

或者更简单一点:

this.$nextTick(() => {
                 this.$refs?.promptInput?.$children[0]?.focus();
             });

另一种写法,直接用querySelector,不用ref

this.$nextTick(() => {
                        document.querySelector('textarea').focus();
                    });

如果有多个

this.$nextTick(() => {
                        document.querySelectorAll('textarea')[1].focus();
                    });
### 可能的原因 当遇到 `this.$refs.singleTable.toggleRowSelection` 或者 `this.$refs.table1.setCurrentRow` 不是函数的错误时,通常意味着几个潜在的问题: - **引用名称不匹配**:表格中的 `ref` 属性名与实际使用的 `this.$refs.XXXX` 中的名字不符[^2]。 - **DOM 更新延迟**:Vue 的异步更新机制可能导致在调用这些方法之前 DOM 尚未完成渲染或更新[^3]。 ### 解决方案 #### 验证 Ref 名称的一致性 确保用于定义表格组件的 `ref="singleTable"` 和访问它的 JavaScript 代码中所使用的字符串完全一致。任何大小写差异都会导致找不到对应的对象属性。 ```html <el-table ref="correctRefName"> <!-- ... --> </el-table> ``` ```javascript console.log(this.$refs.correctRefName); // 应该能够看到 el-table 实例而不是 undefined ``` #### 使用 Vue 生命周期钩子 如果是在页面加载初期就尝试操作表格,则可能因为此时 DOM 还没准备好而失败。可以在 `mounted()` 钩子里执行初始化逻辑来规避这个问题。 ```javascript export default { mounted() { this.$nextTick(() => { // 确保 DOM 已经被渲染完毕 if (this.$refs.singleTable && typeof this.$refs.singleTable.toggleRowSelection === 'function') { this.$refs.singleTable.toggleRowSelection(someDataRow, true); } }); }, }; ``` #### 检查 API 是否存在 确认当前版本的 Element UI 组件库确实提供了期望的方法。不同版本之间可能存在 API 更改的情况。查阅官方文档以验证是否存在 `.toggleRowSelection()` 方法以及其正确的参数形式[^1]。 #### 调试输出 通过控制台打印出 `this.$refs.singleTable` 来查看具体返回的对象结构,从而判断是否有提供所需的方法。 ```javascript console.dir(this.$refs.singleTable); // dir 方便浏览对象树形结构 ``` ### 注意事项 对于拼写错误引发的功能不可用情况也需保持警惕,就像案例里提到的 `validata` 错误应改为 `validate`[^4]一样,在排查过程中仔细核对所有涉及的关键字准确性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值