我正拼命尝试用Ajax更新一个文本区:
application.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 %>");当包含换行符的值被插入到文本区域中时,代码停止工作。
例如,当我插入一个简单的线性值时,我在我的控制台上得到了这样的结果:
$('#invoice_recipient').val("123 Evergreen Terrasse");这是正确的,并且工作得很好。
但是,当尝试插入一个包含换行符的值时,我在控制台上得到如下结果:
$('#invoice_recipient').val("65341 Bruen Brooks
East Charityville"); (请注意Brooks之后的换行符,它可能会导致JavaScript终止代码。)
有没有办法解决这个问题,比如从值中删除换行符?
发布于 2012-10-23 03:59:37
好了,多亏了this blog post,看起来我找到了一个解决方案。
而不是这样:
$('#invoice_recipient').val("<%= @recipient %>");我现在这样做:
$('#invoice_recipient').val("<%= @recipient.to_s.gsub!(/\n/, '\n') %>");gsub!()函数只是将换行符替换为其他换行符(?)而且,令人惊讶的是,它可以工作,尽管它有自己的一些弱点。
感谢大家在这里帮助我!
发布于 2012-10-23 00:03:39
嗯,看起来很奇怪,但我不明白你是怎么得到这个的:
$('#invoice_recipient').val("65341 Bruen Brooks
East Charityville");您是否从其他server-side代码自动生成您的javascript代码?
(也许你的值太长了,导致了这种情况的发生,但我第一次看到这样的事情)
看起来我自言自语是因为你在这么做。因此,我的解决方案很简单,但可能会有帮助,为什么不先将长值放在一个变量中,然后将其传递给.val(),如下所示:
var longText = "this is a looooooooooooooooooooooooooooooooooooooooooooooooooong text that may cause problems";
$('#invoice_recipient').val(longText);从<%= @recipient %>获取longText的方式如下所示:
var longText = "<%= @recipient %>";
这样做可以避免任何可能生成导致javascript代码出现问题的server-side值的隔断线。
我为你做了这个:
http://jsfiddle.net/oscarj24/HssgJ/
正如你所看到的,一个长值在一个textbox中,与隔断线无关。
发布于 2012-10-23 00:06:53
您可以尝试:
$('#invoice_recipient').val(encodeURIComponent("<%= @recipient %>"));不过,我不确定你要找的是什么。
https://stackoverflow.com/questions/13015098
复制相似问题