S-JIS[2007-08-12/2007-10-28] 変更履歴

HTML input要素

色々な入力をする為のボックス。form要素内で使用する(のが正しい)。

type属性によって、入力の種類(ボックスの形)が変わる。

text password
file [/2007-10-28]  
hidden  
button submit
checkbox radio

JavaScriptでフォーカスを当てる方法


type="text"

一行の文字列を入力するのに使用する。

JavaScriptでの扱い方
複数行を扱うtextareaタグ


type="password"

パスワードの入力に使用するので、入力した文字が表示されない。

ファイルタイプと同じく、valueに値をセットしても無視される。


type="file"

ローカルのファイル名(パス名)の入力に使用する。
これを使う際には、formタグのエンコードタイプを指定し、“マルチパート/フォームデータ(multipart/form-data)”にする。→
サブミットすると、ファイル名と共にファイルの内容がサーバーに転送される。→Java:サーバー側でファイルを受け取る方法

ファイルタイプでは、サーバー側でvalue属性に値を入れても画面(ブラウザー上で見たとき)には入れた値が反映されない。(JavaScriptで入れてもダメ)

つまり、サーバー側で入力値の精査を行って精査エラーになって画面を再表示しようと思っても、「ファイルのパスに関しては再表示できない」ということ。

これはセキュリティーの問題で、これが出来てしまうと危険だから。
仮に出来たとすると、HTMLのロード時にJavaScriptでローカルファイル名を指定してそのままsubmit()することにより、(クライアントの)ユーザーの意向を無視して、ローカルファイルの内容をサーバーに送ることが出来てしまう!

参考: @IT会議室のINPUT TYPE=FILEタグでの入力値保持について


ただ、外部からファイル名を入力することは(ちょっと面倒だが)可能。
ファイル選択のテキストエリアへ入力する方法の概要 [2007-10-27]
Javaでファイル選択のテキストエリアへ入力する方法 [2007-10-28]


ファイルタイプでは、accept="MIMEタイプ"という属性があるらしい。[2007-08-15]
これによってアップロードするファイルの種類を指定する意図らしいが、対応しているブラウザーは無いらしく、指定しても無意味。
「ファイルの選択」ダイアログでアップロードする拡張子を指定できると便利だと思う人がいっぱいいると思うんだけどなぁ。


IE(6SP2や7)では、ファイル名欄に変な値を入れると、JavaScriptエラーが発生することがある。[2007-09-20]
(IEの左下(ステータスバーの左端)に黄色いエラーマークと共に「ページでエラーが発生しました」と表示される。そのアイコンをダブルクリックするとエラーの詳細(「エラー:アクセスが拒否されました」)が見られる 。
これはどうやらIE6のSP2以降で起こるっぽい。IE6SP1ではエラーにならなかった…)

具体的には、以下のような条件で そのようなエラーが発生する。

この事象は、文字の種類やファイルの実在有無より、パスの形式に関わっている模様。不正な文字でも絶対パスでは発生せず、相対パス(に似た形)の場合に発生する。
→Microsoftの[IE]Input type=file属性の入力フォームにてsubmitを行ってもWebサーバーから反応がない

ファイル名の入力内容によるサブミット時のJavaScriptエラー有無
実験意図 JScriptエラー
発生有無
備考
ドライブ名のみ C:
X:
Xがドライブとして割り当てられていなくても送信される。
変なドライブ CC: JScriptエラー  
フルパス C:\test.txt 存在しないファイルでも送信される。
ルート \test.txt  
ファイル名のみ test.txt JScriptエラー  
ネットワーク \\server\test.txt 存在しないサーバー・ファイルでも送信される。
特殊文字 <|> JScriptエラー 普通にファイル名の場合と同じ扱いっぽい。
C:<|>
相対パス .\test.txt
./test.txt
..\test.txt
JScriptエラー  
途中が相対パス C:\test\..\test.txt  
ダブルクォーテーション "C:\test.txt" JScriptエラー  
C:"test.txt"  

※送信される(JavaScriptエラーが発生しない)場合、存在しないファイル(や存在していてもディレクトリ)であれば、サーバーで受け取るのは0バイトのデータ。

このJavaScriptエラーはsubmit()関数で発生するので、そのエラーをcatchしてやればエラー処理は出来る (ステータスバーに警告が出ないようになる)。

<script>
function submit_func()
{
	try {
		document.f.submit();
	} catch(e) {
//		var str;
//		for(var key in e) {
//			str += key + "=["+ e[key] + "]\n";
//		}
//		alert(str);
		if (e.number == -2147024891) {
			alert(e.message);	//「アクセスが拒否されました。」
		}
	}
}
</script>

type="checkbox"

チェックボックス。

JavaScriptでの扱い方


HTMLへ戻る / 技術メモへ戻る
メールの送信先:ひしだま