V2EX 的点击在 textarea 里填入 [@用户名] 的功能,控制台报错,有大佬知道什么原因呢?

2020-01-11 16:17:46 +08:00
 IDCFAN

我想把这个功能扒下来,虽然扒下来了,使用起来也正常,但是有 JS 控制台调试有报错,看了 V2EX 官方也是一样的报错。强迫症不能忍呢,但是迫于又不懂 JS,所以来求大佬指点一下。

扒下来的代码(能正常用)

<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>

<script language="javascript">
function moveEnd(t) {
	t.focus(), t.setSelectionRange(-1, -1)
}
function replyOne(t) {
	const e = $("#reply_content"), o = e.val(), n = "@" + t + " ";
	let c = "";
	o.length > 0 ? o != n && (c = o + "\n" + n) : c = n, e.focus(), e.val(c), moveEnd($("#reply_content"))
}
</script>

<a href="#;" onclick="replyOne('V2 大佬');">@</a>
<a href="#;" onclick="replyOne('V2 大神');">@</a>
<textarea name="content" maxlength="10000" class="mll" id="reply_content" style="overflow: hidden; overflow-wrap: break-word; resize: none; height: 112px;"></textarea>

控制台报错

Uncaught TypeError: t.setSelectionRange is not a function
at moveEnd (Untitled-3.html:7)
at replyOne (Untitled-3.html:12)
at HTMLAnchorElement.onclick (VM80 Untitled-3.html:17)
3170 次点击
所在节点    反馈
10 条回复
phy25
2020-01-11 16:30:31 +08:00
manami
2020-01-11 16:32:17 +08:00
SingeeKing
2020-01-11 16:36:07 +08:00
所以这里顺呢 @livid 一下求修复
Livid
2020-01-11 18:01:33 +08:00
@SingeeKing 感谢反馈。会在本周末内解决。

cc @Girlphobia
Livid
2020-01-11 18:08:36 +08:00
@SingeeKing @IDCFAN @Girlphobia

是我写的 bug。

最后那里 moveEnd 应该传进去的是一个 HTMLElement,但是现在代码里传了一个 jQuery object。所以如果那里改成 document.getElementById() 就解决了。

已经在开发环境里验证。会在本周末部署这个修复。
IDCFAN
2020-01-11 18:09:45 +08:00
@Livid 好的,周末后再来扒。
Livid
2020-01-11 18:13:41 +08:00
@IDCFAN 具体来说,就是把这一行:

moveEnd($("#reply_content"))

改成:

moveEnd(document.getElementById("reply_content"))

就不会有那个报错了。
IDCFAN
2020-01-11 18:31:12 +08:00
@Livid 哈哈,伸手党特此谢过,今天就能用上了。
y0bcn
2020-01-11 21:39:04 +08:00
其他平台用户发现 bug 是反馈一下,v2 用户发现 bug 想 fix 它😂
Livid
2020-01-12 06:44:00 +08:00
@SingeeKing 这个问题的修复已经部署。再次感谢提醒。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/637098

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX