【问题标题】:Very strange bug with textareatextarea 非常奇怪的错误
【发布时间】:2013-11-08 14:28:19
【问题描述】:

我之前的问题是关于同样的崩溃,但在 contenteditable 元素中 (previous question)。 展望未来,我发现在 textarea 中也发生了同样的事情。 在我的示例 (JSBin) 中,您只需要模拟如下情况:您在该文本区域中输入 2 行,然后将光标移动到文本中间的某个位置,然后按 Enter 键,页面将崩溃。 这似乎是导致页面崩溃的复杂事件。此外,这种崩溃不仅在 JSBin、fiddle 或其他地方都很相似。

JSBin

HTML:

<textarea id="textarea"></textarea>

JS:

console.log("ready");
var textarea = document.getElementById("textarea"), overflowOnce = true;/* , savedText; */

console.log(textarea);

textarea.addEventListener("overflowchanged", function() {
  if (overflowOnce) {
    console.log("overflowchanged");
    /* console.log("savedText " + savedText); */
    /* console.log("current text: " + textarea.value);*/
    textarea.value = "blabla"; 
    overflowOnce = false;
  }
  else if (!overflowOnce) overflowOnce = true;
}, false);


textarea.onkeypress = function (e) {
  console.log("press " + String.fromCharCode(e.keyCode));
  /* savedText = textarea.value;
  console.log(savedText); */
};

【问题讨论】:

  • 这个对我来说在 Firefox 和 Chrome 中也能正常工作。 “崩溃”到底是什么意思?
  • 它发生在我身上。添加两行文本(使用 enter 转到下一行),单击刚刚创建的文本中的任意位置,再次按 enter。页面应该崩溃(至少在 Chrome 中对我而言)
  • 话虽如此,取出js就可以消除crash,所以有问题
  • 我一直在 textarea 中单击和输入,但没有发生任何奇怪的事情。 (我在 Linux 上使用 Chrome 29.0.1547.62。)edit - 哦,等等,它刚刚发生了。我会记录一个错误,因为它显然是这样的。

标签: javascript css html textarea


【解决方案1】:

我不知道为什么,但是,如果您将 textarea.value = "blabla"; 更改为 setTimeout(function(){textarea.value = "blabla";},1);,崩溃就会停止。

【讨论】:

  • 相同的解决方案适用于大多数 ajax 表单顺便说一句(我的意思是他们在加载内容后完全无法访问内容,只有 setTimeout 有帮助,所以可能是同一个问题)
  • 谢谢。是的,它解决了这个问题。如果有人能解释下面发生的事情,那就太棒了。
  • @VadimKalinin 在我看来,由简单的事情引起的完整页面崩溃只是 Chrome(或 WebKit 或其他)中的运行时错误。 Firefox 没有问题,代码也没有明显错误。
  • @Pointy 有趣的是,Firefox 溢出事件仅在第一次触发。那我就触发不了了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-04
相关资源
最近更新 更多