- - PR -
[JavaScript]入力ファイル(input type="file")の入力チェック方法について
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-12-06 11:53
Java+Strutsの組み合わせでWebアプリケーションを作成しています。
下記のコードでファイル名の入力ボックス+参照ボタンを作成し、 ファイル名の入力ボックスが未入力なら、 submitしないようにしたいのですがうまくいきません。 len = window.document.forms['form1Form'].getElementByName("fileName").value.length; の行で止まってしまっているようなのですが、なぜなのでしょうか? function checkInput(){ len = window.document.forms['form1Form'].getElementByName("fileName").value.length; if(0==len){ return false; } return true; } <html:form action="/form1"> アップロードファイル:<html:file property="fileName"/> <html:submit value=" 送信" onclick="return checkInput();"></html:submit> </html:form> actionの設定は下記のようになっています。 struts-config.xml <action-mappings> <action path="/form1" type="xxx.webapp.action.Form1Action" name="form1Form" input="/001.jsp" scope="request"> <forward name="success" path="/002.jsp"/> </action> <form-beans> <form-bean name="form1Form" type="xxx.webapp.action.Form1Form"/> </form-beans> [ メッセージ編集済み 編集者: ごろう 編集日時 2007-12-06 11:56 ] | ||||
|
投稿日時: 2007-12-06 12:31
getElementsByName()はエレメントそのものではなくエレメントのリスト(配列のようなもの)を返します。同じname属性のエレメントが複数あれば、それを全部返すわけです。
name="fileName"のエレメントが一つしかないなら、以下のようにリストの0番目をしてすれば上手くいくでしょう。 getElementsByName("fileName")[0].value.length; もしくは、inputタグにidを設定してdocument.getElementById(id)を使いましょう。こちらは単一のエレメントを返します。 ちなみにgetElementByNameではなく、getElementsByNameですよ。戻り値が複数なので、メソッド名も複数形なのです。 [ メッセージ編集済み 編集者: sawat 編集日時 2007-12-06 12:32 ] | ||||
|
投稿日時: 2007-12-06 16:19
回答ありがとうございました。 ただ、 len = window.document.forms['form1Form'].getElementsByName("fileName")[0].value.length; として、以下の通りのコードでやってみましたが、 まだ上記のコードで落ちてしまいます。 (ファイル名を空白にして送信ボタン押したら次のページに行ってしまう。) 何か設定が悪かったりするのでしょうか? function checkInput(){ len = window.document.forms['form1Form'].getElementsByName("fileName")[0].value.length; if(0==len){ return false; } return true; } <html:form action="/form1"> アップロードファイル:<html:file property="fileName"/> <html:submit value=" 送信" onclick="return checkInput();"></html:submit> </html:form> actionの設定は下記のようになっています。 struts-config.xml <action-mappings> <action path="/form1" type="xxx.webapp.action.Form1Action" name="form1Form" input="/001.jsp" scope="request"> <forward name="success" path="/002.jsp"/> </action> <form-beans> <form-bean name="form1Form" type="xxx.webapp.action.Form1Form"/> </form-beans> | ||||
|
投稿日時: 2007-12-06 17:02
良くは知らないのですが、最近のブラウザーだと、type="file" の input の領域を読めなくなったのではないでしょうか。 (昔は書き込みだけが制限されていましたが、あらたに読み出しも制限されるようになった。) 件名:「ASP.NETでのファイルアップロードについて」 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=31515&forum=7 でもそのようなことが書かれていました。 | ||||
|
投稿日時: 2007-12-06 17:05
参考になるか分かりませんが、自分は
困ったらブラウザのアドレスバーに javascript:alert(window.document.forms['form1Form']) javascript:alert(window.document.forms['form1Form'].getElementsByName("fileName")) javascript:alert(window.document.forms['form1Form'].getElementsByName("fileName")[0]) javascript:alert(window.document.forms['form1Form'].getElementsByName("fileName")[0].value) javascript:alert(window.document.forms['form1Form'].getElementsByName("fileName")[0].value.length) のように順番に入力して、どこまで正しく取れているかを調べます [ メッセージ編集済み 編集者: AOFG 編集日時 2007-12-06 17:06 ] | ||||
|
投稿日時: 2007-12-06 18:01
ご助言ありがとうございました。
いろいろ試した結果、 strutsの設定が足りなかった事が判明しました。 JavaScriptの質問でstrutsの設定ミスだった事、大変申し訳ありません。 <誤> <html:form action="/form1"> <正> <html:form action="/form1" enctype="multipart/form-data"> formタグに 「enctype="multipart/form-data"」という設定が必要でした。 デフォルトだと「enctype="application/x-www-form-urlencoded"」が設定されていて、 アップロードに失敗するみたいです。 場違いなJava関連の設定ミス、申し訳ありませんでした。 |
1