0

私は必死に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がコードを終了する可能性があることに注意してください。)

おそらく値から改行を削除することによって、これを修正する方法はありますか?

4

4 に答える 4

3

OK、このブログ投稿のおかげで、ここで解決策を見つけたようです。

これの代わりに:

$('#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か?

(多分あなたの価値はとても長くてこれを起こさせます、しかし私が初めてこのようなものを見たとき)


あなたがそうしていたので、私は自分自身に答えたようです。したがって、私の解決策は単純ですが、役立つ可能性があります。最初に長い値を変数に入れてから、次の.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/

ご覧のとおり、長い値はの中にありtextbox、ブレークラインは関係ありません。

于 2012-10-22T16:03:38.960 に答える
0

あなたは試すことができます:

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

ただし、探しているものがわからない。

于 2012-10-22T16:06:52.957 に答える
0

スキッシュを使用する

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

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

于 2012-10-22T16:08:38.697 に答える