开发者社区 问答 正文

替换textarea中的invalidChars

我有一些奇怪的行为,或者我的代码中缺少某些内容,以便能够删除在文本区域中定义的无效字符。此方法有效,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 则
被允许。 谢谢!

展开
收起
几许相思几点泪 2019-12-02 23:04:19 408 分享 版权
阿里云 AI 助理回答

你的代码逻辑本身是正确的,用于检测并替换文本区域中的无效字符(在这个例子中是数字)。问题在于你虽然正确地使用了 replace 方法来创建一个新的字符串,但是你没有将这个新字符串赋值回 feedbackTextarea.value。实际上,字符串在 JavaScript 中是不可变的,这意味着 replace 不会直接修改原始字符串,而是返回一个新的字符串。

幸运的是,你已经在 console.log 中正确地展示了如何应用替换后的值,只是在实际更新 textarea 时忘记应用这一逻辑。你需要确保将替换操作的结果赋值回去。你的代码中已经有这一行 this.value = this.value.replace(invalidChars, "");,这行代码正是用来更新 textarea 的值的。

如果问题仍然存在,可能的原因有:

  1. 事件处理的上下文:确保 this 在事件处理函数中正确地指向了 feedbackTextarea。从你的代码片段来看,使用了箭头函数,这应该不会改变 this 的指向,所以这部分看起来是正确的。

  2. AMP 特定限制:虽然你提到在 AMP 环境下只允许使用 getElementById,但这段标准的 JavaScript 代码理论上应该能在 AMP 环境中正常工作,因为替换文本框内容的操作并不违反 AMP 的规则。

  3. 其他脚本或样式影响:有时候,页面上的其他 JavaScript 脚本或某些 CSS 样式可能会干扰元素的行为。检查是否有其他代码在某个时刻改变了文本框的内容或状态。

综上所述,你的代码逻辑本身应该是可以工作的。如果问题依旧,请检查上述几点,并确认浏览器的开发者控制台中是否有任何错误信息,这些信息可能会提供额外的线索。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址: