0

我正在拼命尝试使用 Ajax 更新文本区域:

应用程序.js:

$("#invoice_project_id").change(function() {
    var value=$(this).val();
    $.get('/invoices/get_recipient', {project_id= : value}  function(response) {
        $('#invoice_recipient').val(response);
    })
});​

get_recipient.js:

$('#invoice_recipient').val("<%= @recipient %>");

当包含换行符的值被插入到 textarea 中时,代码停止工作。

例如,当插入一个简单的单行值时,我在控制台上得到了这个:

$('#invoice_recipient').val("123 Evergreen Terrasse");

这是正确的并且完美地工作。

但是,当尝试插入一个包含换行符的值时,我在控制台上得到了这个:

$('#invoice_recipient').val("65341 Bruen Brooks
East Charityville"); 

(注意之后的换行符Brooks可能会导致 JavaScript 终止代码。)

有没有办法解决这个问题,也许是通过从值中删除换行符?

4

4 回答 4

3

好的,看来我在这里找到了解决方案,感谢这篇博文

而不是这个:

$('#invoice_recipient').val("<%= @recipient %>");

我现在正在这样做:

$('#invoice_recipient').val("<%= @recipient.to_s.gsub!(/\n/, '\n') %>");

gsub!()函数只是用其他换行符 (?) 替换换行符,令人惊讶的是,它可以工作,尽管它本身有一些弱点。

感谢大家在这里帮助我!

于 2012-10-22T19:59:36.930 回答
0

好吧,看起来很奇怪,但我不知道你是怎么得到这个的:

$('#invoice_recipient').val("65341 Bruen Brooks
East Charityville");

javascript您是否从其他代码自动生成server-side代码?

(也许你的价值太长了,导致这种情况发生,但我第一次看到这样的东西)


似乎我回答自己是因为你正在这样做。所以,我的解决方案很简单,但可以提供帮助,你为什么不把 long 值首先放在一个变量中,然后将它传递给.val()这样的:

var longText = "this is a looooooooooooooooooooooooooooooooooooooooooooooooooong text that may cause problems"; 
$('#invoice_recipient').val(longText);

longText是这样获得的<%= @recipient %>

var longText = "<%= @recipient %>";

这样做可以避免任何可能产生server-side导致javascript代码问题的值的断线。


我为你做了这个:

http://jsfiddle.net/oscarj24/HssgJ/

如您所见,长值在 a 内textbox,与隔断线无关。

于 2012-10-22T16:03:38.960 回答
0

使用挤压

%{ Multi-line
   string }.squish                   # => "Multi-line string"

http://apidock.com/rails/String/squish

于 2012-10-22T16:08:38.697 回答
0

你可以试试:

$('#invoice_recipient').val(encodeURIComponent("<%= @recipient %>"));

虽然,不确定你在找什么。

于 2012-10-22T16:06:52.957 回答