我有一些奇怪的行为,或者我的代码中缺少某些内容,以便能够删除在文本区域中定义的无效字符。此方法有效,js <input type="text"> 但
无效js <textarea> 。
有人可以告诉我代码中缺少的内容:
var feedbackTextarea = document.getElementById("edit-open-question");
feedbackTextarea.addEventListener("keyup", function(e) {
var invalidChars = /[0-9]/gi
if (invalidChars.test(this.value)) {
console.log(feedbackTextarea.value.replace(invalidChars, ''))
feedbackTextarea.value.replace(invalidChars, '')
this.value = this.value.replace(invalidChars, "");
}
});
<textarea title="" required="required" id="edit-open-question" name="open_question" cols="60" rows="6" class="form-textarea required" required pattern="[a-zA-Z]*"></textarea>
当我js console.log(feedbackTextarea.value.replace(invalidChars, '')) 通
过删除所有数字显示正确的值,但textarea(feedbackTextarea)不会被替换/更新。
注意:我使用的是AMP,因此,如果仅提供帮助,js getElementById 则
被允许。 谢谢!
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
你的代码逻辑本身是正确的,用于检测并替换文本区域中的无效字符(在这个例子中是数字)。问题在于你虽然正确地使用了 replace
方法来创建一个新的字符串,但是你没有将这个新字符串赋值回 feedbackTextarea.value
。实际上,字符串在 JavaScript 中是不可变的,这意味着 replace
不会直接修改原始字符串,而是返回一个新的字符串。
幸运的是,你已经在 console.log
中正确地展示了如何应用替换后的值,只是在实际更新 textarea
时忘记应用这一逻辑。你需要确保将替换操作的结果赋值回去。你的代码中已经有这一行 this.value = this.value.replace(invalidChars, "");
,这行代码正是用来更新 textarea
的值的。
如果问题仍然存在,可能的原因有:
事件处理的上下文:确保 this
在事件处理函数中正确地指向了 feedbackTextarea
。从你的代码片段来看,使用了箭头函数,这应该不会改变 this
的指向,所以这部分看起来是正确的。
AMP 特定限制:虽然你提到在 AMP 环境下只允许使用 getElementById
,但这段标准的 JavaScript 代码理论上应该能在 AMP 环境中正常工作,因为替换文本框内容的操作并不违反 AMP 的规则。
其他脚本或样式影响:有时候,页面上的其他 JavaScript 脚本或某些 CSS 样式可能会干扰元素的行为。检查是否有其他代码在某个时刻改变了文本框的内容或状态。
综上所述,你的代码逻辑本身应该是可以工作的。如果问题依旧,请检查上述几点,并确认浏览器的开发者控制台中是否有任何错误信息,这些信息可能会提供额外的线索。