如何强制更新HTML的TextArea元素?

时间:2014-11-07 08:25:53

标签: javascript html textarea

很抱歉新手问题,但它与WebKit问题有关。我有下一个JS代码:

var Module = {
        preRun: [],
        postRun: [],
        print: (function() {
          var element = document.getElementById('output');
          if (element) element.value = ''; // clear browser cache
          return function(text) {
            text = Array.prototype.slice.call(arguments).join(' ');
            // These replacements are necessary if you render to raw HTML
            //text = text.replace(/&/g, "&");
            //text = text.replace(/</g, "&lt;");
            //text = text.replace(/>/g, "&gt;");
            //text = text.replace('\n', '<br>', 'g');
            console.log(text);
            if (element) {
              element.value += text + "\n";
              console.log('updated element.value');
              element.scrollTop = element.scrollHeight; // focus on bottom
            }
          };
        })

元素是textarea元素:

<textarea id="output" rows="8"></textarea>

我有使用该函数的printf代码,然后显示提示输入用户名。 所以我希望看到更新的element.value&#39;在显示提示对话框之前,在textarea中的浏览器控制台和打印文本中。

我如何在textarea更改后强制element.value += text + "\n"进行刷新?

它在chrome / firefox中按预期工作但在Safari(WebKit)中失败 - 我无法看到当前输出提示对话框。

1 个答案:

答案 0 :(得分:1)

对我而言,听起来似乎无法完成,但可能存在我不了解的Webkit特定黑客攻击。也许所有浏览器都会在您期望的相同渲染周期内进行两次更新,但Safari会首先显示提示并以某种方式暂停其余更新,直到提示被取消。

最明显的解决方法是

print('lorem ipsum');
setTimeout(function(){
    var response = prompt('my question here');
    //handle the response
}, 10);

这可能保证textarea更新在提示锁定之前发生。