views:

1434

answers:

2

I'm trying to append a strings which end in newlines to a textarea using jQuery. However, different newline tokens show different behavior in Firefox3.5 and IE8, and I can't seem to find a way to use something that works for both browsers.

  • \n works in FF but not in IE
  • <br/> and \r\n work in IE but not in FF
  • No luck using <pre></pre> tags either

I've seen info on the IE innerHTML issue but I'm not exactly sure how to best approach this problem in jQuery. Thanks for any help!

A: 

Does pressing the [enter] key cause a new line in IE8 for you? You may have to do what the answer to this question suggests: http://stackoverflow.com/questions/1282202/enter-does-not-work-in-textarea-in-internet-explorer-8

John Boker
+4  A: 

Not sure how you are setting the textarea content, but if you use the jQuery val method, \n works consistently in Firefox and IE (Including IE8):

var txt = $("textarea#idhere");
txt.val( txt.val() + "\nSomething here\n\nAgain");

Causes the textarea to display:

Existing content
and linebreaks if any.
Something here

Again

You can see a demo here that works in FF and IE8: Demo | Source

Doug Neiner
Thanks, this works! Would you know how performant is this compared to append()?
Suan
Also, surprisingly, `textarea.empty()` doesn't work when you use `val()`. (It used to work when I used `append()`). You can go back to http://jsbin.com/unali/3/edit to see it. Really neat tool btw!
Suan
@Suan, it will perform faster than `.append()` because it is setting an attribute vs. messing with the DOM. Also, just call `.val('')` to empty the textarea. In "old school JS" you would get/set a textarea value like this: `var txt = document.getElementById('idhere'); txt.value += "\nSomething here\n\nAgain";` See how it uses an attribute vs. DOM elements?
Doug Neiner