• ベストアンサー

<SELECT>タグの折り返し

テーブルで横幅100で囲った枠の中に、<select>タグを表示しています。 このとき、optionで表示する項目が長いと、テーブルの横幅が伸びてしまいます。 テーブルの横幅が伸びないようにする方法はないでしょうか? できれば、optionの項目を折り返し表示するとか、プルダウンしたときだけテーブルを突き抜けて表示するとかできれば良いのですが。 たとえば、こんな感じです。 <table border="1" width="100"> <tr>  <td>   <select name="test">    <option value="d1">1234567890123456789012345678901234567890</option>    <option value="d2">1234567890123456789012345678901234567890</option>    <option value="d3">1234567890123456789012345678901234567890</option>   </select>  </td> </tr> </table> 宜しくお願いします。

  • HTML
  • 回答数3
  • ありがとう数6

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

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

無理やりですが、こんなんではどうでしょうか? <select name="test" style="width:100" onFocus="this.style.width=''" onBlur="this.style.width=100"> <option value="d1">1234567890123456789012345678901234567890</option> <option value="d2">1234567890123456789012345678901234567890</option> <option value="d3">1234567890123456789012345678901234567890</option> </select>

tomkeifer
質問者

補足

すごい発想ですね。 私は<option>へのイベント取得ばかり考えていたので、こういう発想はまったく思い浮かばなかったです。 この方法を使わせていただこうと思います。 ありがとうございました。

その他の回答 (2)

  • cobun5513
  • ベストアンサー率59% (25/42)
回答No.2

No.1です。 ちょっとtomkeiferさんの要求と微妙に違うのですけでも、私、実はJavaScript苦手でして、 http://www.ueda.info.waseda.ac.jp/~gaku/js/how008.html 等を参照してアレンジしました。 selectのほうに簡単に識別できる略語をおき、textareaに表示させる形です。 -------- <script language="javascript"> function DispValue(form, select) { v = select.value; var str = document.getElementsByName("message")[0]; str.value += v; } </script> <form method="post" name="hoge"> <table border="1" width="100"> <tr>  <td>   <select name="sel" onchange="DispValue(this.form, this)">    <option value="1234567890123456789012345678901234567890">1st item</option>    <option value="1234567890123456789012345678901234567890">2nd item</option>    <option value="1234567890123456789012345678901234567890">3rd item</option>    <option value="1234567890123456789012345678901234567890">4th item</option>    <option value="1234567890123456789012345678901234567890">5th item</option>   </select>   <textarea name="message" rows="10"></textarea>  </td> </tr> </table> </form> ---------- ただ、問題。 選択しなおしても、前のデータが残って列記されてしまう点と、Perlでテストしていないので、動作保証できないこと。 これをヒントに、JavaScriptを編集されては如何でしょう。 あと、プルダウンメニューってよくあるじゃないですか?アレのvalueをhiddenに埋め込んでpostするとか。 すみません。力不足で。

tomkeifer
質問者

お礼

色々調べてみましたが、どうもoptionに対してonMouseOverが取得できるかどうかはブラウザ次第のようですね。 http://www.tohoho-web.com/wwwtags.htm IE6.0はNGで、FireFoxはOKでした。 表示量が増えるけど、ラジオとチェックボックスにしようかと検討中です。 AN1=AN2さん、本当にご親切にありがとうございました。 他に良い方法をご存知の方いらっしゃいましたら、ご教授お願いします。

tomkeifer
質問者

補足

わざわざすみません、参考になります。 私もJavaScriptは苦手でして、しかも1つのソースにHTMLとCSSとJavaScriptが同居すると、眺めただけで思考が停止してしまいます。 贅沢いって本当にすみません。 これだと選択してマウスを離してやっと文章全部が表示されます。 なんとか<option>タグに対してonMouseOverとかのイベントを取得できないものかと試行錯誤やっていますが、うまくできません。

  • cobun5513
  • ベストアンサー率59% (25/42)
回答No.1

<select>の大きさは基本的には一番長い<option>の長さに固定されます。これは仕様なので曲げようがありません。 CSSのwidthで大きさを決めることもできますが、そうすると、長い<option>が収まりきらない場合に表示されなくなります。 さて、それらを踏まえて強引に「見た目だけ」解決するならば、以下のようになるでしょう。 --------------- <table border="1" width="100"> <tr>  <td>   <select name="test">    <option value="d1">1234567890</option>    <option value="d1">1234567890</option>    <option value="d1">1234567890</option>    <option value="d1">1234567890</option>    <option>---------</option>    <option value="d2">1234567890</option>    <option value="d2">1234567890</option>    <option value="d2">1234567890</option>    <option value="d2">1234567890</option>    <option>---------</option>    <option value="d3">1234567890</option>    <option value="d3">1234567890</option>    <option value="d3">1234567890</option>    <option value="d3">1234567890</option>   </select>  </td> </tr> </table> ----------------- しかし、これは思い切って意味の無い使い難いメニューですね^^ その他JavaScript等を驅使する方法もなくはないようですが、そうすると、JavaScript=Offの人は見れなくなって意味がない。 ちょっと、回答にはなっていないのですが、 どうしても<select>で無いとだめなのでしょうか? ラジオボタンやチェックボックスで対応できるのなら、そちらを使われるほうが良いと思いますよ。

tomkeifer
質問者

お礼

style="width:80px;" と横幅を固定しておいて、表示が切れてしまうものに対しては、バルーンヒントみたいにポップアップできればと思い調べているのですが..... <option>タグに対して title や alt 属性は使用できないようですね。

tomkeifer
質問者

補足

なるほど。目から鱗です。 が、残念ながら、実際には表示項目の部分は別データで存在しており、それをPerlで取り込んでHTMLを生成します。 ちょっと実用的ではないです。 ラジオボタンやチェックボックスも考えたのですが、データ量が多すぎるので表示部分が多くなりすぎてしまいます。 もしよろしければ、JavaScriptの方法を教えていただけませんでしょうか?

関連するQ&A

  • JavaScriptのSELECTの値について

    JavaScriptについて、質問させてください。 html1からhtml2にSELECTで選択した値を渡すプログラムを作成しています。 下はそのソースです。 <html> <head></head> <body> <form method="POST" action="html2" onSubmit="入力チェック"> <table> <tr> <td>項目A-1</td> <td>項目A-2</td> <td> <select name="selname1"> <option value="0">0</option> <option value="1,11,111">1</option> <option value="2,22,222">2</option> </select> </td> </tr> <tr> <td>項目B-1</td> <td>項目B-2</td> <td> <select name="selname2"> <option value="0">0</option> <option value="3,33,333">3</option> <option value="4,44,444">4</option> </select> </td> </tr> </table> </form> </body> </html> 項目は全部で10ほどあるので、途中省略しています。 SELECTで0以外が選ばれていた場合に、それに関連する項目情報と optionのvalueをhtml2に送信させて、一覧表のように表示させたいと思います。 JavaScriptのDOMやループ文を使うようですが、 私は専門外なので、どのような処理を組めばよいかわかりません。 どなたか、わかる方ご教示願います。

  • Selectの項目へのアクセス

    Selectを二つ並べ、左で選択されている項目の内容を右のSelectに追加したいのですが、色々わかりません。 ・項目内容を文字列の取得方法は? ・項目の追加方法は? ・項目内容を書き換えるには? 忙しい時期で恐縮なんですが、よろしくお願いいたします。 <title>新しいページ 1</title> <SCRIPT LANGUAGE="JavaScript"> <!--- function list(src,dst){ for(i=0;i<src.length;i++){ if (src.options[i].selected == true) dst.options[0].value = src.options[i].value; } } //---> </SCRIPT> </head> <body> <form method="POST" name="PostForm"> <table border="0" width="100%"> <tr> <td width="7%"> <select size="5" name="MemberList" multiple> <option>A氏</option> <option>B氏</option> <option>C氏</option> <option>D氏</option> <option>E氏</option> <option>F氏</option> </select></td> <td width="70%"> <select size="5" name="AssignedList" multiple> <option> </option> <option> </option> <option> </option> <option> </option> <option> </option> <option> </option> </select></td> </tr> </table> <p><input type="button" value="ボタン" name="B3" onclick="list(MemberList,AssignedList)"></p> </form> </body> </html>

  • tableタグについて

    <table width="700" border="0"> <tr><td width="700">あああああああ</td></tr> <tr><td width="200">いい</td><td width="500">ううううう</td></tr> </table> このタグですと【ああああああ】の部分が2段になります。 多分<td width="200">のためやと思うのですが、 <tr><td width="200">いい</td><td width="500">ううううう</td></tr> の部分を <tr><td width="700"><table width="700"><tr><td width="200">いい</td><td width="500">ううううう</td></tr></table></td></tr> にすると表示されます。 この方法以外にもっと簡単に表示できる方法はないでしょうか お願いします。

    • ベストアンサー
    • HTML
  • 【タグ】左寄せする方法

    一部消去していますが、以下のようなフォームを左に任意のスペースを空けて表示させる場合、どういったタグを使えばいいのでしょうか。 よろしくお願いいたします。 <FORM ACTION="" METHOD="GET" NAME="TG" TARGET="_blank"><table width="250" border="0"><tr><td bgcolor="#0000FF"><div align="center"><font color="#FFFFFF"><strong>検索</strong></font></div></td></tr><tr><td>選びください。<br></br><select name="stayym" size="1"><option value="200902"></option></select></br><br>選びください。</br><select name="catid" size="1">n><option value="11203</option></option></select><input type="submit" value="GO"></td></tr><tr><td><div align="right">ツーリスト</div></td></tr></table></FORM>

    • ベストアンサー
    • HTML
  • 選択ボックスで選んだものに応じて値を変更する方法

    片方の選択ボックスで選んだものに応じて もう片方の選択ボックスの表示内容を変更したいと思います。 「なす」を選んだら30円 「きゅうり」を選んだら40円 「ねぎ」を選んだら50円 「選んで下さい。」を選んだら0円(初期値) としたいと思うのですが、下記内容をどのように 変更すればよろしいのでしょうか。 教えて下さい。 <table border="0" width="700"> <tr> <td width="50%"> <select name="野菜"> <option value="SENTAKU">選んで下さい。</option> <option value="NASU">なす</option> <option value="KYUURI">きゅうり</option> <option value="NEGI">ねぎ</option> </select> </td> <td> <select name="値段"> <option value="NEDAN">0円</option> </select> </td> </tr> </table>

    • ベストアンサー
    • HTML
  • プルダウンによる表示制御方法

    プルダウンの選択内容による表示の切り替えを行いたいです。 例えば、AとCを選択すると下にあるテキストボックスが非表示になり Bを選択するとテキストボックスが表示するように制御を行いたいです。 <table align="center" border="0" cellpadding="0" cellspacing="0"> <tr><td> <form name="a"> <SELECT NAME="b"> <OPTION SELECTED> <OPTION VALUE="0">A <OPTION VALUE="1">B <OPTION VALUE="2">C </SELECT> </td></tr> <tr><td> <input type="text" size="6" maxlength="5" name="text1" value=""> </td></tr> </form> </table></form></td></tr></table> すみませんが、よろしくお願い致します。

    • ベストアンサー
    • HTML
  • TABLEタグの幅指定

    テーブルの幅を厳密に指定したいのですが、 例えば以下のような1行2列のテーブルがあるとき、 <TABLE CELLSPACING=1 CELLPADDING=4 BORDER=0> <TR> <TD WIDTH=100>***</TD> <TD WIDTH=100>***</TD> </TR> </TABLE> このような場合にテーブルタグにWIDTH属性を加えるとすると、 100*2+4*4+1*3=219で、WIDTH=219が正確な値なのでしょうか? よろしくお願いします。

  • テーブルの横幅を常にブラウザ一いっぱいに表示するに

    テーブルの横幅を常にブラウザ一いっぱいに表示するには? たとえば *********************************************** <HTML> <HEAD> <TITLE>test</TITLE> </HEAD> <BODY> <table border=1 cellspacing=0 cellpadding=0> <caption>キャプション</caption> <tr> <td>内容1</td> <td>内容2</td> </tr> </table </BODY> </HTML> *********************************************** を作ると、画像のようにコンパクトに表示されてしまいます。 やりたい事はブラウザの横幅が 10cmなら画面いっぱいテーブルを表示させて、 20cmなら画面いっぱいにテーブルを表示させたいです。 <table border=1 cellspacing=0 cellpadding=0 width="2000"> するとはみ出してしまうし、 <table border=1 cellspacing=0 cellpadding=0 width="1000"> だと小さすぎます。 誰がどのブラウザで開いても、横幅は画面いっぱいに入るように表示するにはどういうタグを書けばいいのでしょうか?

    • ベストアンサー
    • HTML
  • option 選択による表示&非表示

    <select name="var"> <option value="1">見せる</option> <option value="2">見せない</option> </select> <!--内容--> <table> <tr></td>内容</td></tr> </table> option 「見せる」を選択した場合、テーブル全体が<tabel>~</table>が表示、 option 「見せない」を選択した場合、テーブル全体が<tabel>~</table>が表示されなようにしたいです。 ご教授よろしくお願いいたします。

  • レイヤーとセレクトボックスが重なった場合について

    例えば、以下のようなHTMLのようにレイヤー部分を固定しておいて ページをスクロールさせていき、セレクトボックスと重なった場合、 セレクトボックスの方が優先されて表示されてしまいますが、 これをレイヤーの表示が優先されるようにすることは可能でしょうか? (ブラウザはIE6です。) どなたかよろしくお願いいたします。 <html> <script language="javascript"> <!-- function keepMessage() { document.all["sampleTable"].style.top = document.body.scrollTop; document.all["sampleTable"].style.left= document.body.scrollLeft; setTimeout("keepMessage()",1); } //--> </script> <body onLoad="keepMessage()"> <div id="sampleTable" style="position:absolute;"> <table border=1> <tr><td>名前</td><td>サンプル1</td></tr> <tr><td>住所</td><td>サンプル2</td></tr> </table> </div> <table border="0" width="320"> <tr><td>.</td></tr> </table> <br><br><br> <select name="出身"> <option value="SP1">サンプル1 <option value="SP2">サンプル2 <option value="SP3">サンプル3 <option value="SP4">サンプル4 </select> <br><br><br><br><br><br><br> <br><br><br><br><br><br><br> <br><br><br><br><br><br><br> <br><br><br><br><br><br><br> <br><br><br><br><br><br><br> </body> </html>

    • ベストアンサー
    • HTML

専門家に質問してみよう