jQuery插件atwho.js实现@提示框过程中碰到的问题

本文档记录了在实现jQuery插件atwho.js的@提示框功能时遇到的问题及解决过程。在对话框弹出后,通过关键代码确保textarea的正确操作,最终成功实现功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景:

demo主要使用技术: **vue, elementUI, jQuery, atwho.js**

最终效果:

用户点击分享按钮, 弹出如下的分享对话框, 接着用户在多行文本输入框textarea中输入@时, 会在@下方出现提示框, 可以使用键盘上下方向键或鼠标选择提示框中的选项

关键代码:

renderAt() {
   let _this = this;
   $(function () {
     let atConfig = {
       at: "@",
       data: [..._this.follows],
     };
     $("#inputor").atwho(atConfig);
   });
 },

问题描述:

文本框内输入了@, 但是@下方没有如愿出现提示框(提示框内的数据是从后台获取的, 非本地模拟数据), 偶尔修改vue文件中的js代码, 发现有提示框了 -_-|||, 但是刷新页面后, 又不行了(补充, demo使用**vue-cli**创建).

排查过程:

先是怀疑后台数据没有获取到, 但是断点打印数据是正常的, 排除.
然后怀疑提示框的渲染时间不够, 在关键代码中使用定时器, 5s后执行, 结果还是一样不行, 也排除.
接着参考使用范例, 新建一个html页面测试, 可以正常使用.

最后排查页面结构时, 发现获取到数据后, 对话框内容没有并没有渲染出来(原本设计是, 从后台获取到数据后, 立即执行关键代码), 直到用户点击分享按钮, 分享对话框弹出时, 对话框内容才会渲染出来. 而多行文本输入框属于对话框内容, 于是代码执行到$("#inputor").atwho(atConfig);这里时, 因为对话框内容没有渲染, $("#inputor")实际上获取不到任何内容, $("#inputor").atwho(atConfig)也就不会执行(这里jQuery不报错)

解决:

在分享对话框弹出后, 再执行关键代码(确保获取到textarea)

总结:

菜是原罪, 花两分钟就能解决的问题, 最后几经波折, 废了半天劲才搞定, 最后附上At.js的官方文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值