JavaScript プログラミング講座

 

ファイル選択コントロールについて

 


■ファイル選択コントロールについて

 
ファイル選択コントロールを使用すると、ユーザーがファイルを選択できるようになります。
 
ファイル選択コントロールは、<INPUT> 要素です。
 
type 属性に "file" を指定します。
 
<INPUT> タグを使用して、ファイル選択コントロールを表示する

<form>

  <input type="file" >

</form>
 
サンプル表示


 
■ファイルのアップロードについて
 
ユーザーが選択したファイルは、アップロードする事ができます。
 
ファイルをアップロードする方法については、こちらで解説しています。
 


 

ファイル選択コントロールを作成する

 


■ファイル選択コントロールを動的に作成する

 
■ HTMLInputElement オブジェクトを作成する
 
document.createElement() メソッドを使用します。
 
引数に、"input" を指定します。
 
動的に HTMLInputElement オブジェクトを作成する

// HTMLInputElement オブジェクトを作成する
var element = document.createElement("input");

// 出力テスト
console.log(element);
 
■コントロールタイプを「ファイル選択」に設定する
 
type 属性を使用します。
 
「ファイル選択」に変更するには、"file" を指定します。
 
コントロールタイプを「ファイル選択」に設定する

// HTMLInputElement オブジェクトを作成する
var input_file = document.createElement("input");

// コントロールタイプを「ファイル選択」に設定する
input_file.type = "file";
 

■ラジオボタンをブラウザに表示する


HTMLInputElement オブジェクトを、任意のノードリストに登録します。
 
ファイル選択コントロールを動的に作成して、ブラウザに表示する

// ------------------------------------------------------------
// HTMLInputElement オブジェクトを作成する
// ------------------------------------------------------------
var input_file = document.createElement("input");

// コントロールタイプを「ファイル選択」に設定する
input_file.type = "file";

// ------------------------------------------------------------
// BODY のノードリストに登録する
// ------------------------------------------------------------
document.body.appendChild(input_file);
 

■静的な <INPUT> タグから、HTMLInputElement オブジェクトを取得する


要素を取得する方法については、こちらで解説しています。
 
静的な <INPUT> タグから、HTMLInputElement オブジェクトを取得する

<html>
  <body>

    <form>

      <input type="file" id="aaa" >

    </form>

    <script type="text/javascript">
    <!--
	// "aaa" という ID 属性のエレメントを取得する
	var input_file = document.getElementById("aaa");

	// 出力テスト
	console.log(input_file);

    //-->
    </script>

  </body>
</html>
 


 

ファイルが選択されたか調べる

 
 
 


■ファイルが選択されたか調べる


ファイルが選択されたか調べるには、onchange イベントを使用します。
 
選択されたファイルの情報を取得するには、value プロパティを使用します。
 
空文字 "" が得られる場合、ファイルが選択されていません。
 
ファイルが選択されたか調べる

<html>
  <body>

    <form>

      <input type="file" id="aaa" >

    </form>

    <script type="text/javascript">
    <!--
	// "aaa" という ID 属性のエレメントを取得する
	var input_file = document.getElementById("aaa");

	// ------------------------------------------------------------
	// 値が変化した時に実行されるイベント
	// ------------------------------------------------------------
	input_file.onchange = function (){

		// ファイルが選択されたか
		if(input_file.value){

			console.log("ファイルが選択された:" + input_file.value);

		}else{

			console.log("ファイルが未選択");

		}

	};

    //-->
    </script>

  </body>
</html>
 

■ファイルを取得する(HTML5 世代)

 
■選択されたファイルをすべて取得する
 
files プロパティを使用します。
 
FileList オブジェクトが得られます。
 
InternetExplorer 9 以前では、対応していません。
 
■ FileList オブジェクトについて
 
FileList オブジェクトは、配列のように中身を取り出せます。
 
中には、File オブジェクトが格納されています。
 
■ File オブジェクトについて
 
こちらで解説しています。
 
■取得例
 
選択されたすべてのファイルを順番に取得する

<html>
  <body>

    <form>

      <input type="file" id="aaa" multiple >

    </form>

    <script type="text/javascript">
    <!--
	// "aaa" という ID 属性のエレメントを取得する
	var input_file = document.getElementById("aaa");

	// ------------------------------------------------------------
	// 値が変化した時に実行されるイベント
	// ------------------------------------------------------------
	input_file.onchange = function (){

		// ファイルが選択されたか
		if(!(input_file.value)) return;

		// FileList オブジェクトを取得する
		var file_list = input_file.files;
		if(!file_list) return;

		var i;
		var num = file_list.length;
		for(i=0;i < num;i++){
			// File オブジェクトを取得する
			var file = file_list[i];

			// 出力テスト
			console.log("--- id:" + i);
			console.log("name:" + file.name);
			console.log("size:" + file.size);
			console.log("type:" + file.type);
		}

	};

    //-->
    </script>

  </body>
</html>
 


 

ファイルの複数選択を有効にする(HTML5 世代)

 


■ファイルの複数選択を有効にする

 
ファイルの複数選択を有効にするには、multiple 属性を使用します。
 
InternetExplorer 9 以前では、対応していません。
 
■静的に有効にする場合
 
ファイルの複数選択を有効にする(静的)

<form>

  <input type="file" multiple >

</form>
 
■動的に有効にする場合
 
ファイルの複数選択を有効にするには、multiple プロパティを使用します。
 
true をセットします。
 
ファイルの複数選択を有効にする(動的)

// HTMLInputElement オブジェクトを作成する
var input_file = document.createElement("input");

// コントロールタイプを「ファイル選択」に設定する
input_file.type = "file";

// ファイルの複数選択を有効にする
input_file.multiple = true;

// BODY のノードリストに登録する
document.body.appendChild(input_file);
 


 

選択可能なファイルの種類を制限する(HTML5 世代)

 


■選択可能なファイルの種類を制限する

 
選択可能なファイルの種類を制限するには、accept 属性を使用します。
 
InternetExplorer 9 以前では、対応していません。
 
絶対的な制限ではありません。
 
ユーザーは、すべてのファイルを選択することができます。
 
■コンテンツタイプについて
 
選択可能としたいコンテンツタイプ(MIME Type)を、文字列で指定します。
 
コンテンツタイプの種類の一例です。
 
文字列 説明
"text/plain" テキスト文書
"application/xml" XML 文書
"image/jpeg" JPEG 画像ファイル
"image/png" PNG 画像ファイル
"audio/mpeg" MP3 オーディオファイル
 
テキスト文書のみ選択できるよう設定する(静的)

<input type="file" accept="text/plain" >
 
■特殊な記述方法について
 
複数のコンテンツタイプを指定する事もできます。
 
カンマ "," で区切ります。
 
「テキスト文書」と「HTML 文書」と「XML 文書」のみ選択できるよう設定する(静的)

<input type="file" accept="text/plain,text/html,application/xml" >
 
ワイルドカード "*" を使用する事もできます。
 
すべての画像ファイルのみ選択できるよう設定する(静的)

<input type="file" accept="image/*" >
 
すべてのオーディオとビデオファイルのみ選択できるよう設定する(静的)

<input type="file" accept="audio/*,video/*" >
 
■動的に有効にする場合
 
選択可能なファイルの種類を制限するには、accept プロパティを使用します。
 
記述方法は同じです。
 
テキストファイルのみ選択できるよう設定する(動的)

// HTMLInputElement オブジェクトを作成する
var input_file = document.createElement("input");

// コントロールタイプを「ファイル選択」に設定する
input_file.type = "file";

// 選択可能なファイルの種類を制限する
input_file.accept = "text/*";

// BODY のノードリストに登録する
document.body.appendChild(input_file);