• ベストアンサー

改行をデータとして送信

javascriptとperlとMySQLでデータベースを作っている初心者です。 複数選択が可能なセレクトボックスで選択中の項目を、 隣にあるテキストエリアで常時表示するスクリプトを組みました。 ところが表示自体はできるのですが、 テキストエリア内で選択項目ごとに改行して表示させることができません。 以下が現在の構文です。 #スクリプト部 function ABC() { var MAX = document.AAAFORM.BBBSELECTBOX.length; var str = ""; for(i=1;i<MAX;i++){ if(document.AAAFORM.BBBSELECTBOX.options[i].selected){ if(str == ""){str = document.AAAFORM.BBBSELECTBOX.options[i].text} else{str += "●" + document.AAAFORM.BBBSELECTBOX.options[i].text} } } document.AAAFORM.CCCTEXTAREA.value = str; } #セレクトボックス部 <SELECT multiple onchange="ABC()" name="BBBTEXTAREA" > $option(別箇所で編集) </SELECT> #テキストエリア部 <textarea name="$CCCTEXTAREA" >$CCCTEXTAREA</textarea> 以上の構文の"●"の部分を""にした状態で、 現在は正常にテキストエリア内に選択中の項目が表示されます。 これに改行を加えようとすると、 "●"の部分に"\n"を加えることになるか、 もしくは「""」の中間で記述自体を改行するのかと思ったのですが、 どちらも実行時に「オブジェクトを指定してください」というエラーが出てしまいます。 別の方法も模索しているのですが… なかなか良い案が思い当りません。 この問題について、あるいは代替案について、 よろしければみなさんのお知恵を拝借させてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • okmotokun
  • ベストアンサー率59% (92/155)
回答No.4

"\n" を "\\n" か '\n' にすれば良いと思いますよ。 なぜかは自分で考えてね。

despie
質問者

お礼

タイミング良すぎてビックリなのですが、 自分でいろいろやってみて、 ご指摘のとおり"\\n"でうまくいきました。 不必要なエスケープをしていたということなんでしょうか? ともかくありがとうございました!

その他の回答 (3)

回答No.3

> これに改行を加えようとすると、 > "●"の部分に"\n"を加えることになるか、 > もしくは「""」の中間で記述自体を改行するのかと思ったのですが、 > どちらも実行時に「オブジェクトを指定してください」というエラーが出てしまいます。 そのエラーになる書き方の補足をお願いします。 エラーになる原因がわかるかもしれませんし、原因がわかれば対処法もわかるかもしれません。

despie
質問者

お礼

今いろいろ試したのですが、 \nを\\nにするとうまくいきました。 皆様ありがとうございました。

despie
質問者

補足

ご回答ありがとうございます。 ・ケース1 function ABC() { var MAX = document.AAAFORM.BBBSELECTBOX.length; var str = ""; for(i=1;i<MAX;i++){ if(document.AAAFORM.BBBSELECTBOX.options[i].selected){ if(str == ""){str = document.AAAFORM.BBBSELECTBOX.options[i].text} else{str += "\n" + document.AAAFORM.BBBSELECTBOX.options[i].text} } } document.AAAFORM.CCCTEXTAREA.value = str; } 以上です。 本当に●を\nに変えただけでエラーになってしまいます。 ・ケース2 function ABC() { var MAX = document.AAAFORM.BBBSELECTBOX.length; var str = ""; for(i=1;i<MAX;i++){ if(document.AAAFORM.BBBSELECTBOX.options[i].selected){ if(str == ""){str = document.AAAFORM.BBBSELECTBOX.options[i].text} else{str += " " + document.AAAFORM.BBBSELECTBOX.options[i].text} } } document.AAAFORM.CCCTEXTAREA.value = str; } 以上です。 テキストエリアに改行を加えたいときは、 構文そのものに改行を加えるとあったので、 そのとおりやってみましたが、 案の定ダメでした。 ケース1と同じエラーが出ます。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>"●"の部分に"\n"を加えることになるか、 普通にご指摘の通りのフローでいけそうですけど・・・ こんな感じですね <script> function change(obj){ var v=""; for(var i=0;i<obj.options.length;i++){ if(obj.options[i].selected){ if(v!="") v+="\n"; v+=obj.options[i].text; } } document.getElementById("hoge").value=v; } </script> <select size="10" multiple onchange="change(this)"> <option value="1">text1</option> <option value="2">text2</option> <option value="3">text3</option> <option value="4">text4</option> <option value="5">text5</option> <option value="6">text6</option> <option value="7">text7</option> <option value="8">text8</option> <option value="9">text9</option> <option value="10">text10</option> </select> <textarea id="hoge" style="height:10em;"> </textarea>

despie
質問者

お礼

今いろいろ試したのですが、 \nを\\nにするとうまくいきました。 皆様ありがとうございました。

despie
質問者

補足

ご回答ありがとうございます。 ご教示いただいたとおりに組んだのですが、 同じエラーが出てしまいました。 そして \n だけを抜くと、正常に動作します。 やはり\nを受け付けないという仕様なんでしょうか…?

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

改行自体は \n(FF)だったり \r\n(IE)だったりするみたいですが、ブラウザ側で処理してくれるようで、 \nでOKなはずです。 >「オブジェクトを指定してください」 は別のところでのエラーでは? 実行時のエラーであるなら、どの行で出ているか確かめ、さらに1行を分解するなどして、どこの部分でエラーとなっているか確認してみればわかるかと思います。 >以上の構文の"●"の部分を""にした状態で、 >現在は正常にテキストエリア内に選択中の項目が表示されます。 とありますが、その状態で"" → "\n"に変えただけなのでしょうか? ご質問文の <textarea name="$CCCTEXTAREA" >$CCCTEXTAREA</textarea> の部分が気になりますが、タイポでしょうか? perlのソースをコピペしたのか、HTMLがこうなのか不明ですが、もしHTMLならこのエレメントが取得できないでしょうし、perlの場合だと$CCCTEXTAREAの内容は確実にCCCTEXTAREAになっているのでしょうか?(というか、javascriptが固定で参照しているのだから、変数にする必要はないのでは?)

despie
質問者

お礼

今いろいろ試したのですが、 \nを\\nにするとうまくいきました。 皆様ありがとうございました。

despie
質問者

補足

ご回答ありがとうございました。 >「オブジェクトを指定してください」 >は別のところでのエラーでは? >以上の構文の"●"の部分を""にした状態で、 >現在は正常にテキストエリア内に選択中の項目が表示されます。 構文を直すのが面倒なので、 通常は""の状態で使用しています。 そして、""の状態では全くエラーは起こりません。 >とありますが、その状態で"" → "\n"に変えただけなのでしょうか? そのとおりです。 その部分を"\n"変えただけでエラーになるので、 ここがエラーの原因だと思うのですが…。 >ご質問文の ><textarea name="$CCCTEXTAREA" >$CCCTEXTAREA</textarea> >の部分が気になりますが、タイポでしょうか? 私がまだソラでスクリプトを組めるレベルではないので、 この部分は別に存在していたCGIからコピペして使用しています。 ですので詳細はわからないのですが… 上記の"\n"さえなければ正常に参照はしています。

関連するQ&A