A 回答 (5件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
こんにちは。
直接取得する方法は無いと思います。
擬似的にJavaScriptで可能かもしれませんが、完全なものは出来ないような気がします。
ちなみに、キャンセルまたは開くを押したのを使用する目的はなんでしょうか?
それにより代替案があるかもしれません。
この回答への補足
やはりムリでしょうか。
キャンセルまたは開くを押したのを使用する目的は、
少し長くなってしまいますが、以下のとおりです。
メインフレーム(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には空文字を入れるように
できるかな・・・と思った次第であります。
大変長くなってしまい、申し訳ないのですがが、
イメージして頂けますでしょうか?
何かアイデアがあれば、ご教授ください。
よろしくお願いします。
No.2
- 回答日時:
こんにちは。
VBScriptはあまり使ったこと無いので的外してるかもしれませんが、
Aのtextをクリアボタンでクリアするオペレーションで
Bフレームのフォームもリセットかけるのじゃだめでしょうか。
他にクリアしたくない物があるとすると難しいかもしれませんが。
この回答への補足
Bフレームのリセットも当然考えましたが、
アップロードするファイルは複数(5つまで)指定できますので、
Aフレームの「クリア」ボタンをクリックで
Bフレームのリセットは難しいです。
(Aフレームの「クリア」ボタンは一つのファイル指定をクリアする仕様なので・・・)
No.3
- 回答日時:
私も、#2の方が言われているように、
fileタグをフォームでくくって、クリアのタイミングでリセットするのが簡単だと思います。
キャンセルしたのかどうかの判断ですけど、
キャンセルした場合、
ファイルタグの内容(value)は、""のままであるか前回のままであるわけですから、
前回の内容というのを適当なフィールドにとっておけばいいと思います。
(結局、見かけ上のファイル(A)が""になっても(Bで)送信されてしまうのでBをリセットすることが必要だと思われますが・)
この回答への補足
#2の方への補足の通り、
BフレームのリセットはNGです。
>(結局、見かけ上のファイル(A)が""になっても(Bで)送信されてしまうのでBをリセットすることが必要だと思われますが・)
Bのファイルは送信されてしまいますが、
サーバーでの判断として、
Aの見かけ上のファイルが""であれば、
Bのファイルは保存しないようにしています。
No.4
- 回答日時:
そもそも、「ファイル選択ダイアログ」を開く処理って???
ダイアログに「開く」と「キャンセル」と複数のボタンがあるのなら、それを表す戻り値があると思われますが・・・。MsgBox 関数だってそれなりに戻り値はあるし・・・。
(自作であり、かつ戻り値がなければそれがそもそもの問題かと・・・。)
>★キャンセルしたが、
>前回値がBのfileタグに残ってしまっているので、
>Aの見かけ上のtextに反映されてしまう。
それが問題なら、Aのクリアの時点でBのfileタグの値をクリアするべきでしょう。つまり意識としてAのtextはBのfileタグの値と一緒という設計になっている様なので。
とはいえ、oCtlFile.click() がなんだか判らないのでどうしようもないかと・・・。
(というか、これによって動作している処理自体が不明。クリックイベントのきっかけとしてなのでしょうが、そのクリックイベントでどの様な処理が記述されているのか?)
ところで、初回にいきなりキャンセルで戻った場合は、問題ないのでしょうか?
この回答への補足
>oCtlFile.click() がなんだか判らないのでどうしようもないかと・
oCtlFileは、<input type="file">コントロールオブジェクトです。
oCtlFile.click()は、
<input type="file">で表示される「参照...」をクリックしたイベントを起こしています。
>ダイアログに「開く」と「キャンセル」と複数のボタンがあるのなら、それを表す戻り値があると思われますが・・・
ためしに、
Dim xxx
xxx = oCtlFile.click()
として戻り値が拾えるか試してみましたが、
「開く」にしろ「キャンセル」にしろ
xxxはEmpty値でした。
戻り値は拾えないようです。
>ところで、初回にいきなりキャンセルで戻った場合は、問題ないのでしょうか?
初回の場合は、Bフレームのfileタグには
何も指定されていないので、問題ないです。
No.5
- 回答日時:
一応、「仕様」にバグがある可能性もあるという意識も持っておいた方が良いと思います。
なにしろ、クリアはA側のみの仕様,ダイアログの結果は拾えない仕様,ダイアログの結果に関わらずBに残っている情報をAに設定する仕様。
・・・、仕様バグの様な気がぁ~。
>oCtlFile.click()は、
><input type="file">で表示される「参照...」をクリックしたイベントを起こしています。
そのクリックイベントでなんらかの処理が記述されている訳ですよね?
その処理がダイアログを開いている事だと思うのですが、そこでダイアログの戻り値を拾わない事にはダイアログに複数ボタンがあるとしても処理として不自然ですが・・・。
なんとか拾って、せめて変数にでも残して、後にその変数にて判断できる様にしたい処ですが・・・。
つまり、ダイアログの結果にて処理を分岐させる(常にBの内容をAに設定する事をやめる)か、クリアでA,B共に行うかのどちらかでしょう・・・。
サーバ側で問題ないのなら、スクリプトでもBのクリアは可能だと思いますが・・・。そうでないと見かけ上の意識と実際の結果がずれてしまうと思いますが・・・。
尚、上記で対応できない場合は、「これは出来ません。」という前提で「これが出来る方法はありませんか?」と聞いている様な事になりますが・・・。
わたし(プログラマ)としては設計からおかしい様に感じ、元から設計しなおすべきと感じます。
やはり「開く」or「キャンセル」を拾うのはムリっぽいので、クリアボタンをなくすように仕様変更をして対応しました。
みなさん、アドバイスありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBSの処理中一旦処理を止めて再...
-
VBSで応答不要のメッセージボッ...
-
VBA kernel32 の意味
-
HTA(HTMLアプリケーション)にて...
-
VBA、UserFormを前面に出力して...
-
”お待ち下さい”が表示できない。
-
ACCESS側からEXCELの書式を設定...
-
vb.netでバッチ処理
-
ASP.NETでのメッセージ画面を出...
-
OSでの動作スピードの違い
-
VB.NETで数秒間msgboxの...
-
エクセルが勝手に立ち上がる
-
【C#】 あるイベントから別イ...
-
WEB上にボタンが押せない
-
DoEvents
-
VB Loopを一時停止し再開あるい...
-
エクセルVBAでクリップボード内...
-
シャットダウン時のExcel強制終...
-
Application.ScreenUpdating=Fa...
-
VBA メッセージボックスを自動...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBSの処理中一旦処理を止めて再...
-
メッセージボックスのボタン名変更
-
ACCESS側からEXCELの書式を設定...
-
VBA メッセージボックスを自動...
-
VBA kernel32 の意味
-
Application.ScreenUpdating=Fa...
-
VBA、UserFormを前面に出力して...
-
Excel VBA で処理中断(DoEvents...
-
エクセルVBAでクリップボード内...
-
VBSで応答不要のメッセージボッ...
-
Excel VBA 自動的に閉じるMsgBox
-
VCでウエイトをミリ秒でかけ...
-
キーボード入力、マウス操作を...
-
C#で処理中画面を表示したい。
-
【C#】 あるイベントから別イ...
-
マウスのクリックを無視したい
-
【MFC】イベントの無効化について
-
Excelのワークシートに行を挿入...
-
アクセスでのキー送信について
-
シャットダウン時のExcel強制終...
おすすめ情報