• 締切済み

<input type="file">タグで「キャンセル」か「開く」を取得したい

いつもお世話になります。 <input type="file">タグで、 ファイル選択ダイアログを開いたあとに、 「キャンセル」を押したのか、 ファイルを選択したのか(「開く」を押したのか)を 取得する方法はないのでしょうか? よろしくお願いします。

  • HTML
  • 回答数5
  • ありがとう数1

みんなの回答

回答No.5

一応、「仕様」にバグがある可能性もあるという意識も持っておいた方が良いと思います。 なにしろ、クリアはA側のみの仕様,ダイアログの結果は拾えない仕様,ダイアログの結果に関わらずBに残っている情報をAに設定する仕様。 ・・・、仕様バグの様な気がぁ~。 >oCtlFile.click()は、 ><input type="file">で表示される「参照...」をクリックしたイベントを起こしています。 そのクリックイベントでなんらかの処理が記述されている訳ですよね? その処理がダイアログを開いている事だと思うのですが、そこでダイアログの戻り値を拾わない事にはダイアログに複数ボタンがあるとしても処理として不自然ですが・・・。 なんとか拾って、せめて変数にでも残して、後にその変数にて判断できる様にしたい処ですが・・・。 つまり、ダイアログの結果にて処理を分岐させる(常にBの内容をAに設定する事をやめる)か、クリアでA,B共に行うかのどちらかでしょう・・・。 サーバ側で問題ないのなら、スクリプトでもBのクリアは可能だと思いますが・・・。そうでないと見かけ上の意識と実際の結果がずれてしまうと思いますが・・・。 尚、上記で対応できない場合は、「これは出来ません。」という前提で「これが出来る方法はありませんか?」と聞いている様な事になりますが・・・。 わたし(プログラマ)としては設計からおかしい様に感じ、元から設計しなおすべきと感じます。

stay_gold
質問者

お礼

やはり「開く」or「キャンセル」を拾うのはムリっぽいので、クリアボタンをなくすように仕様変更をして対応しました。 みなさん、アドバイスありがとうございました。

回答No.4

そもそも、「ファイル選択ダイアログ」を開く処理って??? ダイアログに「開く」と「キャンセル」と複数のボタンがあるのなら、それを表す戻り値があると思われますが・・・。MsgBox 関数だってそれなりに戻り値はあるし・・・。 (自作であり、かつ戻り値がなければそれがそもそもの問題かと・・・。) >★キャンセルしたが、 >前回値がBのfileタグに残ってしまっているので、 >Aの見かけ上のtextに反映されてしまう。 それが問題なら、Aのクリアの時点でBのfileタグの値をクリアするべきでしょう。つまり意識としてAのtextはBのfileタグの値と一緒という設計になっている様なので。 とはいえ、oCtlFile.click() がなんだか判らないのでどうしようもないかと・・・。 (というか、これによって動作している処理自体が不明。クリックイベントのきっかけとしてなのでしょうが、そのクリックイベントでどの様な処理が記述されているのか?) ところで、初回にいきなりキャンセルで戻った場合は、問題ないのでしょうか?

stay_gold
質問者

補足

>oCtlFile.click() がなんだか判らないのでどうしようもないかと・ oCtlFileは、<input type="file">コントロールオブジェクトです。 oCtlFile.click()は、 <input type="file">で表示される「参照...」をクリックしたイベントを起こしています。 >ダイアログに「開く」と「キャンセル」と複数のボタンがあるのなら、それを表す戻り値があると思われますが・・・ ためしに、 Dim xxx xxx = oCtlFile.click() として戻り値が拾えるか試してみましたが、 「開く」にしろ「キャンセル」にしろ xxxはEmpty値でした。 戻り値は拾えないようです。 >ところで、初回にいきなりキャンセルで戻った場合は、問題ないのでしょうか? 初回の場合は、Bフレームのfileタグには 何も指定されていないので、問題ないです。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

私も、#2の方が言われているように、 fileタグをフォームでくくって、クリアのタイミングでリセットするのが簡単だと思います。 キャンセルしたのかどうかの判断ですけど、 キャンセルした場合、 ファイルタグの内容(value)は、""のままであるか前回のままであるわけですから、 前回の内容というのを適当なフィールドにとっておけばいいと思います。 (結局、見かけ上のファイル(A)が""になっても(Bで)送信されてしまうのでBをリセットすることが必要だと思われますが・)

stay_gold
質問者

補足

#2の方への補足の通り、 BフレームのリセットはNGです。 >(結局、見かけ上のファイル(A)が""になっても(Bで)送信されてしまうのでBをリセットすることが必要だと思われますが・) Bのファイルは送信されてしまいますが、 サーバーでの判断として、 Aの見かけ上のファイルが""であれば、 Bのファイルは保存しないようにしています。

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.2

こんにちは。 VBScriptはあまり使ったこと無いので的外してるかもしれませんが、 Aのtextをクリアボタンでクリアするオペレーションで Bフレームのフォームもリセットかけるのじゃだめでしょうか。 他にクリアしたくない物があるとすると難しいかもしれませんが。

stay_gold
質問者

補足

Bフレームのリセットも当然考えましたが、 アップロードするファイルは複数(5つまで)指定できますので、 Aフレームの「クリア」ボタンをクリックで Bフレームのリセットは難しいです。 (Aフレームの「クリア」ボタンは一つのファイル指定をクリアする仕様なので・・・)

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 直接取得する方法は無いと思います。 擬似的にJavaScriptで可能かもしれませんが、完全なものは出来ないような気がします。 ちなみに、キャンセルまたは開くを押したのを使用する目的はなんでしょうか? それにより代替案があるかもしれません。

stay_gold
質問者

補足

やはりムリでしょうか。 キャンセルまたは開くを押したのを使用する目的は、 少し長くなってしまいますが、以下のとおりです。 メインフレーム(A)と隠しフレーム(B)があり、 実際のfileタグはBにあります。 サーバーへのデータ転送は 全てBフレームで行う、という規約があるため、 Bにfileタグをおいています。 ただ、Aにも見かけ上のため、 textタグと「参照」ボタン、 及び取消のための「クリア」ボタンを 置いています。 現在ファイルの選択方法は、 BのfileタグをAの「参照」ボタンイベントのVBscriptで Bのfileタグのclick()イベントを起こして ダイアログを開いています。 ファイル選択ダイアログでファイルを選択後、 Aの見かけ上のtextにパスを反映するような スクリプトになっています。 (以下のようなスクリプトです) 【Aのスクリプト(「参照」ボタンのonclickイベントで動く】 Sub fileUpd_onclick(Byval sNo) Dim oCtlFile Dim oCtlDummy set oCtlFile = Bフレーム.document.getElementById("filUldFile" & sNo) set oCtlDummy = document.getElementById("txtDummyFile" & sNo) oCtlFile.click() Call Bフレーム.SetFileValue(CInt(sNo)) oCtlDummy.value = Bフレーム.m_vTmpFileNameArr(CInt(sNo)-1) End Sub 【Aのスクリプト(「クリア」ボタンのonclickイベントで動く】 Sub fileCls_onclick(Byval sNo) document.getElementById("txtDummyFile" & sNo).value = "" Bフレーム.m_vTmpFileNameArr(CInt(sNo)-1) = "" End Sub 【Bのスクリプト】 Public m_vTmpFileNameArr(4) sub SetFileValue(Byval nFileNo) m_vTmpFileNameArr(nFileNo-1) = document.getElementById("filUldFile" & nFileNo).value end sub 上記のスクリプトでは、 以下のようなオペレーションで問題がおきてしまいます。 1.Aの「参照」ボタンでファイルを選択。 2.Aの見かけ上のtextをクリアボタンでクリアする。 3.もう一度Aの「参照」ボタンをクリックするが、 キャンセルで取り消す。 ★キャンセルしたが、 前回値がBのfileタグに残ってしまっているので、 Aの見かけ上のtextに反映されてしまう。 そこで、ファイル選択ダイアログのキャンセルが取れれば、 Aの見かけ上のtextには空文字を入れるように できるかな・・・と思った次第であります。 大変長くなってしまい、申し訳ないのですがが、 イメージして頂けますでしょうか? 何かアイデアがあれば、ご教授ください。 よろしくお願いします。

関連するQ&A

  • input TYPE="FILE"で取得した画像を表示

    お世話になります。 htmlのタグにinput type="file"というのがありローカルの画像を選択できるエクスプローラが起動するというボタンなのですが、それで選択した画像ファイルをサーバ処理を行うことなくブラウザに表示させたいのです、こんなことが可能なのでしょうか? なにかサンプル等ご存知の方宜しくお願いします。

    • ベストアンサー
    • HTML
  • <input type="file">でテキストボックスを触れなくする方法

    いつもお世話になっております。 表題の件で質問なのですが、HTMLのタグ <input type="file" ....>ではテキストボックスの値を readonlyに設定し、「参照...」ボタンからファイルを 選択するようにする方法はあるのでしょうか。 ご存知の方がいらっしゃいましたらご教授願えれば 幸いに存じます。 よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • <input type="file">のイベントについて

    <input type="file">でファイルを選択した時点にイベントを追加する方法を教えてもらえませんか? セキュリティの観点から無理なのでしょうか?

  • <input type=

    <input type="button">はボタン、<input type="checkbox">はチェックボックスというように呼ばれていると思いますが、世間では<input type="file">タグのことをなんと呼んでいるのでしょうか?ドキュメントを書く際にいつも困惑しています。世間一般で通用する<input type="file">タグの名称がありましたら教えていただけますか?

    • ベストアンサー
    • CGI
  • type="file"の<INPUT>タグに任意のファイルを指定したい

    HTMLの <INPUT>タグの "type"プロパティを、"file"とし、 この項目のデフォルトの値、もしくは JavaScriptからファイルを直接指定するということは 可能でしょうか。 ご回答をよろしくお願いいたします。

    • ベストアンサー
    • HTML
  • <input type="file">アップロード

    下記教えて下さい <input type="file" name="datafile"> <input type="submit" value="送信する"> 上記を使ってファイルのアップロード機能を作りたいのですが、 (1)ファイル選択していない状態で「選択されていません」となるので  文字を消したい(文字を非表示、または違う文言にしたい)場合、どこで設定するのでしょうか。 (2)送信するボタンを置かずに、選択時にそのまま送信処理につなげたいのですが  どのようにすれば良いでしょうか。

    • ベストアンサー
    • HTML
  • input type="file"の入力チェック

    よろしくお願い致します。 入力チェックページ付きのメールフォームについて、添付ファイルを必須項目にしたいと考えております。 <input type="text" name="お名前" />の場合は、以下のようなコードで入力チェックしております。 if($DATA['お名前'] == ""){ $err.="【お名前】を入力して下さい。\n"; } <input type="file" name="添付ファイル" />の添付ファイルも同じコードで試してみたところ、 if($DATA['添付ファイル'] == ""){ $err.="【添付ファイル】を選択して下さい。\n"; } ファイルの添付の有無に関わらず、「添付ファイルを選択して下さい。」というエラーコードが常に表示されます。 「input type="file"」の場合の入力チェックはどのようなコードを書けば良いのでしょうか?

    • 締切済み
    • PHP
  • <input type="file">で条件分岐

    <input type="file">で、送信ボタンをクリックする前に、下記のようなことをしたいです。 どうやるのでしょうか? ■A ・ファイルを選択したかどうか、の条件分岐 ■B ・選択したファイル名を、JavaScript変数へ格納

  • input type="file"に入力するには?

    わからなかったので質問させてください。 inputtype="text"のときは入力できたのですが以下の方法で入力できたのですがfile場合はできないのでしょうか?。 入力したいのはファイルパスです。 ファイルパスを入力して画像ファイルをアップロードさせてたいのですがどのようにすればいいでしょうか。 どなたかご教授ください。 <input type="file" name="file" size="30"> WebBrowser1.Document.All.GetElementsByName("file")(0).InnerText = TextBox1.Text

  • JavaScriptのfileオブジェクト(input type="file")の選択を初期化したい

    fileでユーザーが選択したファイルを、未選択の状態にしたいのですができません。 valueプロパティを""にしてもnullにしても、元の値(ファイルパス)が入ったままです。 HTML: <input type="file" name="picture_file"> JavaScript: document.form_main.picture_file.value = ""; alert(document.form_main.picture_file.value); document.form_main.picture_file.value = null; alert(document.form_main.picture_file.value); どうにかして初期化する方法はありますでしょうか?file以外のほかのinput項目は変更せず、また画面遷移もせず実現する必要があります。