ServiceNow页面含点ID的textarea添加文本JS按钮失效问题
解决ID含点号的textarea无法被jQuery选中的问题
哦,这个问题我碰到过!罪魁祸首就是ID里的点号——jQuery的选择器语法会把点号当成类选择器的分隔符,所以$("#incident.close_notes")其实是在找ID为incident且带有close_notes类的元素,而不是你要的那个ID完整是incident.close_notes的textarea。这就解释了为什么点击按钮没反应也没报错——jQuery没找到目标元素,自然不会执行后续逻辑。
下面给你两种靠谱的解决方法:
方法1:转义ID里的点号
在jQuery选择器中,用双反斜杠\\.转义点号,这样jQuery就会把它当成ID的一部分,而不是类选择器的分隔符。修改你的AddResolve函数如下:
function AddResolve() { // 用\\.转义ID里的点号 const closeNotesTextarea = $("#incident\\.close_notes"); if (!closeNotesTextarea.val()) { closeNotesTextarea.val(text_resolve); closeNotesTextarea.css({'background-color':'green'}); closeNotesTextarea.focus(); } }
方法2:使用原生JS的getElementById(更推荐)
原生JS的document.getElementById()不受点号影响,它会严格匹配完整的ID字符串,不会产生歧义。这种方法更直接,也避免了jQuery选择器的语法陷阱:
function AddResolve() { const closeNotesTextarea = document.getElementById("incident.close_notes"); if (!closeNotesTextarea.value) { // 原生JS用.value获取值 closeNotesTextarea.value = text_resolve; closeNotesTextarea.style.backgroundColor = 'green'; // 原生JS设置样式 closeNotesTextarea.focus(); } }
你可以先在浏览器控制台测试document.getElementById("incident.close_notes"),如果能返回对应的textarea元素,说明这个方法肯定能生效。
内容的提问来源于stack exchange,提问作者4532066
相关产品推荐
相关产品推荐

