disabledの値をサーバーにPOSTする方法を実現する必要があったので自作しました。
disabledの値をサーバーにPOSTする
HTMLでFORMに貼りつけた値をサーバのCGIにPOSTする際にその部品がdisabledになっているとサーバに送信されません。
(今さらながらハマりました。)
これを防ぐには大きく分けて2つの方法があります。
送信直前にdisabledを解除
これは送信直前にdisabledになっている値を解除してサーバのCGIに送信します。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <script type="text/javascript"> function undisabled() { document.getElementById( "input_text" ).disabled = false ; return true; } </script> </head> <body> <form method="POST" action="cgi-bin/formmail.cgi"> <input type="text" name="text" id="input_text" value="送信内容" disabled="disabled" /> <input type="submit" value="送信" onclick="javascript:unDisabled();" /> </form> </body> </html>
「送信直前にdisabledの値をhiddenにコピー」よりも隠しタグが不要な分、実装は楽です。
しかし、サーバで処理をしている間も画面を表示したままの場合は、ユーザーが画面の情報を書き変えてしまう事が発生します。
(POSTした後にdisabledに戻せば問題ないのかも知れませんが...)
送信直前にdisabledの値をhiddenにコピー
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <script type="text/javascript"> function text_copy() { document.formMain.text2.value = document.formMain.text1.value ; return true; } </script> </head> <body> <form method="POST" action="cgi-bin/formmail.cgi"> <input type="hidden" name="text2" id="hidden_text" value="" /> <input type="text" name="text1" id="input_text" value="送信内容" disabled="disabled" /> <input type="submit" value="送信" onclick="text_copy();" /> </form> </body> </html>
これは送信直前にdisabledになっている値を別の隠しタグにコピーして送信し、サーバのCGIではそちらの値を使います。
こちらは画面表示をしたままでもdisabledの状態に変わりはないので「送信直前にdisabledを解除」のような心配ありません。
どちらの方法も一長一短なので、利用する場合は注意が必要です。
特にユーザーの選択状態によって「入力」の可、不可が決まるような画面は、サーバ側のCGIで必ず値が来ると思って処理をしていると思わぬところで不具合を引き起こします。