DOMとフォームの値
今作っているもので
ある入力項目に対して
表示 → 表示が消えて入力エリア登場 → 入力エリア消えて表示部分登場+入力内容反映
という流れをDOM,CSSを使って同じ画面で実現させようとしているけれども
ブラウザの再読み込みを行うと
- 表示はリセットされる
- 入力エリアは再読み込み前の値が保存されている
という状況に遭遇。
Internet Explorer6 SP2、Mozilla Firefox1.5 RC1で同じ動きを確認。
Opera7.54, 8.0、Konqueror 3.1.4は表示、入力項目も消える。
わけわからない、、
<html> <head> <meta http-equiv="Content-Style-Type" content="text/css"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <title>JavaScriptテスト</title> <script language="JavaScript" type="text/javascript"> var artype = ['','subject','operations']; var p_link = 'link_'; var p_disp = 'disp_'; var p_text = 'tmp_'; var p_btn = 'btn_'; var p_hidden= 'i_'; function editTextOn(type){ if(document.getElementById){ // リンク除去 document.getElementById(p_link+artype[type]).style.display='none'; // 表示除去 document.getElementById(p_disp+artype[type]).style.display='none'; // テキストエリア出現 document.getElementById(p_text+artype[type]).style.display='inline'; document.getElementById(p_btn+artype[type]).style.display='inline'; // テキストエリアに差込 document.getElementById(p_text+artype[type]).value = document.getElementById(p_hidden+artype[type]).value; } } function editTextOff(type){ if(document.getElementById){ // リンク出現 document.getElementById(p_link+artype[type]).style.display='inline'; // 表示出現 document.getElementById(p_disp+artype[type]).style.display='inline'; // テキストエリア除去 document.getElementById(p_text+artype[type]).style.display='none'; document.getElementById(p_btn+artype[type]).style.display='none'; // テキストエリアの内容を反映 document.getElementById(p_hidden+artype[type]).value = document.getElementById(p_text+artype[type]).value; document.getElementById(p_disp+artype[type]).innerHTML = document.getElementById(p_text+artype[type]).value.replace(/\n/,"<br>"); } } </script> </head> <body> <form name="frm" action=""> <table border="0" cellspacing="1" cellpadding="3" bgcolor="#666666" width="600"> <tbody> <tr> <td colspan="4"><font size="-1" color="#ffffff">初期値有</font></td> <td align="right"><a href="javascript:editTextOn(1);" id="link_subject"><font size="-1" color="#ffffff">[編集]</font></a></td> </tr> <tr> <td colspan="5" bgcolor="#ffffff"><font size="-1"><div id="disp_subject">初期値有</div></font><input type="hidden" name="i_subject" value="初期値有" id="i_subject"> <textarea id="tmp_subject" rows="10" cols="70" name="tmp_subject" style="display:none">初期値有</textarea> <input type="button" value="編集終了" id="btn_subject" onclick="editTextOff(1);" style="display:none"> <br> </td> </tr> <tr> <td colspan="4"><font size="-1" color="#ffffff">初期値無</font></td> <td align="right"><a href="javascript:editTextOn(2);" id="link_operations"><font size="-1" color="#ffffff">[編集]</font></a></td> </tr> <tr> <td colspan="5" bgcolor="#ffffff"><font size="-1"><div id="disp_operations"></div></font><input type="hidden" name="i_operations" value="" id="i_operations"> <textarea id="tmp_operations" rows="10" cols="70" name="tmp_operations" style="display:none"></textarea> <input type="button" value="編集終了" id="btn_operations" onclick="editTextOff(2);" style="display:none"> <br></td> </tr> </tbody> </table> </form> </body> </html>
動作の確認重点でとにかく書いたので中身が汚い(ノ∀`)タハー
ぱっとしない対応方法だけどonloadでフォームの内容を表示内容に差し込む処理を加えればいいかなぁ、、