将拼写检查属性设置为 false 不会删除红色下划线

Setting spellcheck attribute to false does not remove red underlines

我正在尝试在 <textarea spellcheck='true'><textarea spellcheck='false'> 之间切换。

Chrome:一旦设置了spellcheck=true,就不能“取消设置”,即即使设置为false,红色下划线不会消失(至少在 macOS 上)。

Firefox:表现符合预期

Safari:我还是不明白它在做什么,只有当我点击它时才会出现红色下划线,然后它不会消失。

我怀疑这是 OS 特有的。感谢其他 OS 的报告。

const textarea = document.querySelector("textarea");
const form = document.querySelector("form");
const output = document.getElementById("output");

textarea.focus();

form.addEventListener("change", (e) => {

 const trueOrFalse = e.target.value;
 textarea.focus();
 textarea.setAttribute("spellcheck", trueOrFalse);
 output.textContent = textarea.parentNode.innerHTML;

});
body {
  font: 16px/140% monospace;
  background: #eee;
  color: #777;
  padding: 60px;
}

textarea {
 margin: 32px 0;
 width: 320px;
 height: 120px;
 font-size: 16px;
}

label {
 color: #777;
 cursor: pointer;
}

input[type="radio"]:checked + span {
  color: #000
}
<form>
  <label>
    <input type="radio" value="true" name="spellcheck" />
    <span>spellcheck true</span>
  </label>
  <label>
  <input type="radio" value="false" name="spellcheck" checked />
   <span>spellcheck false</span>
  </label>
</form>
<div>
  <textarea spellcheck="false">Here is an example of a misspeltz word</textarea>
</div>

<div id="output">
</div>

我发现实现(至少在 Chrome 中)是 spellcheck 模式仅适用于新插入的文本。为了完全“重置”该字段,您需要删除并重新插入 textarea.

var textarea = document.querySelector("textarea");
const form = document.querySelector("form");
const output = document.getElementById("output");

textarea.focus();

form.addEventListener("change", (e) => {

 const trueOrFalse = e.target.value;
 const text = textarea.value;
 textarea.parentNode.removeChild(textarea);
 textarea = document.createElement("textarea");
 textarea.textContent = text;
 document.querySelector(".textarea-container").appendChild(textarea);
 
 textarea.focus();
 textarea.setAttribute("spellcheck", trueOrFalse);
 output.textContent = textarea.parentNode.innerHTML;

});
body {
  font: 16px/140% monospace;
  background: #eee;
  color: #777;
  padding: 60px;
}

textarea {
 margin: 32px 0;
 width: 320px;
 height: 120px;
 font-size: 16px;
}

label {
 color: #777;
 cursor: pointer;
}

input[type="radio"]:checked + span {
  color: #000
}
<form>
  <label>
    <input type="radio" value="true" name="spellcheck" />
    <span>spellcheck true</span>
  </label>
  <label>
  <input type="radio" value="false" name="spellcheck" checked />
   <span>spellcheck false</span>
  </label>
</form>
<div class="textarea-container">
  <textarea spellcheck="false">Here is an example of a misspeltz word</textarea>
</div>

<div id="output">
</div>