【问题标题】:Insert a new line to textarea using javascript (IE bug ?)使用 javascript 向 textarea 插入新行(IE 错误?)
【发布时间】:2015-02-04 11:40:43
【问题描述】:

我正在尝试实现以下功能。我希望能够捕捉分号字符的击键并将其更改为在按下此键后自动添加新行。在代码中它看起来像这样:

var keyCode = e.keyCode ? e.keyCode : e.which;
if (keyCode == 59){
            e.preventDefault();     
            var tmpStyle = j$("#styleEditor").val();                
            tmpStyle += ";\n";
            j$("#styleEditor").val(tmpStyle);                               
}

所以,首先我要抓住这个键(使用“keypress”事件),然后我要停止它的正常行为,最后我要在 textarea 内容的末尾添加分号和换行符。

现在,在 FF、Chrome 上一切正常。然而,在 IE 9 上,它的行为真的很奇怪——它没有添加新行,而是添加了 .. 空白。然后,如果退格这个空格并输入“;”它再次按预期工作。您可以先输入一些其他字符,然后输入分号来重现它。

我还注意到删除 e.preventDefault() 会消除此问题,尽管随后会将两个分号粘贴到 textarea 中。有人可以帮我吗?

你可以在DEMO上查看我的小演示

【问题讨论】:

  • 试试这个:tmpStyle = ";\r\n";
  • 我已经试过了,没有效果
  • 你有没有把 添加到你的 html 文件的顶部,有时候这些小事很重要
  • 是的,它已添加 - 放置演示的 jsfiddle 会自动处理这些事情
  • 好的,你可以试试 IE 9 的 "\n/g"

标签: javascript jquery html internet-explorer textarea


【解决方案1】:

您可以删除e.preventDefault() 并使用事件keyup 而不是keypress

function checkForSemicolons(e) {

    var style = j$("#styleEditor").value;
    var keyCode = e.keyCode ? e.keyCode : e.which;

    if (keyCode == 59) {
        //e.preventDefault();   
        var tmpStyle = j$("#styleEditor").val();
        tmpStyle += "\n";
        j$("#styleEditor").val(tmpStyle);


    }
}

小提琴:

http://jsfiddle.net/pmzzd56w/3/

【讨论】:

  • 这个解决方案根本不起作用。它应该在分号后添加新行,并且在您的解决方案中它甚至不进入 if 子句。这很奇怪,但是在分号的 keyup 代码中已经改变了。我也试图改变这个来纠正一个。然后进入if子句,但问题依然存在
  • 也许这是为什么它对我不起作用的线索。你在哪个浏览器上检查过这个?我在 Chrome 和 IE 9 上检查它。在你发表评论后,我也在 FF 上检查了它,确实,它在 FF 下工作。但是在 Chrome 和 IE 9 上它不起作用
  • @Vijay 注意,keyCodes 在使用keypresskeydown/up 时是不同的。
猜你喜欢
  • 2013-03-21
  • 1970-01-01
  • 2013-01-04
  • 2023-03-15
  • 1970-01-01
  • 2022-10-24
  • 2018-10-25
  • 2019-05-28
  • 1970-01-01
相关资源
最近更新 更多