A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
一応、「仕様」にバグがある可能性もあるという意識も持っておいた方が良いと思います。
なにしろ、クリアはA側のみの仕様,ダイアログの結果は拾えない仕様,ダイアログの結果に関わらずBに残っている情報をAに設定する仕様。
・・・、仕様バグの様な気がぁ~。
>oCtlFile.click()は、
><input type="file">で表示される「参照...」をクリックしたイベントを起こしています。
そのクリックイベントでなんらかの処理が記述されている訳ですよね?
その処理がダイアログを開いている事だと思うのですが、そこでダイアログの戻り値を拾わない事にはダイアログに複数ボタンがあるとしても処理として不自然ですが・・・。
なんとか拾って、せめて変数にでも残して、後にその変数にて判断できる様にしたい処ですが・・・。
つまり、ダイアログの結果にて処理を分岐させる(常にBの内容をAに設定する事をやめる)か、クリアでA,B共に行うかのどちらかでしょう・・・。
サーバ側で問題ないのなら、スクリプトでもBのクリアは可能だと思いますが・・・。そうでないと見かけ上の意識と実際の結果がずれてしまうと思いますが・・・。
尚、上記で対応できない場合は、「これは出来ません。」という前提で「これが出来る方法はありませんか?」と聞いている様な事になりますが・・・。
わたし(プログラマ)としては設計からおかしい様に感じ、元から設計しなおすべきと感じます。
やはり「開く」or「キャンセル」を拾うのはムリっぽいので、クリアボタンをなくすように仕様変更をして対応しました。
みなさん、アドバイスありがとうございました。
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.3
- 回答日時:
私も、#2の方が言われているように、
fileタグをフォームでくくって、クリアのタイミングでリセットするのが簡単だと思います。
キャンセルしたのかどうかの判断ですけど、
キャンセルした場合、
ファイルタグの内容(value)は、""のままであるか前回のままであるわけですから、
前回の内容というのを適当なフィールドにとっておけばいいと思います。
(結局、見かけ上のファイル(A)が""になっても(Bで)送信されてしまうのでBをリセットすることが必要だと思われますが・)
この回答への補足
#2の方への補足の通り、
BフレームのリセットはNGです。
>(結局、見かけ上のファイル(A)が""になっても(Bで)送信されてしまうのでBをリセットすることが必要だと思われますが・)
Bのファイルは送信されてしまいますが、
サーバーでの判断として、
Aの見かけ上のファイルが""であれば、
Bのファイルは保存しないようにしています。
No.2
- 回答日時:
こんにちは。
VBScriptはあまり使ったこと無いので的外してるかもしれませんが、
Aのtextをクリアボタンでクリアするオペレーションで
Bフレームのフォームもリセットかけるのじゃだめでしょうか。
他にクリアしたくない物があるとすると難しいかもしれませんが。
この回答への補足
Bフレームのリセットも当然考えましたが、
アップロードするファイルは複数(5つまで)指定できますので、
Aフレームの「クリア」ボタンをクリックで
Bフレームのリセットは難しいです。
(Aフレームの「クリア」ボタンは一つのファイル指定をクリアする仕様なので・・・)
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には空文字を入れるように
できるかな・・・と思った次第であります。
大変長くなってしまい、申し訳ないのですがが、
イメージして頂けますでしょうか?
何かアイデアがあれば、ご教授ください。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
スタティックテキストが表示さ...
-
VBA、UserFormを前面に出力して...
-
ACCESS側からEXCELの書式を設定...
-
【C#】 あるイベントから別イ...
-
VBSで応答不要のメッセージボッ...
-
InvalidateRectがうまくいかない
-
マウスのクリックを無視したい
-
メッセージボックスのボタン名変更
-
VBA kernel32 の意味
-
起動後直に実行するコードはど...
-
Excel VBA 自動的に閉じるMsgBox
-
WEB上にボタンが押せない
-
DirectX環境下での方向キー同時...
-
VB.NET開発(イベントプロシー...
-
スケジューリング方式
-
VBSの処理中一旦処理を止めて再...
-
MFCのView終了時の終了確認
-
VCでウエイトをミリ秒でかけ...
-
VBA メッセージボックスを自動...
-
Application.ScreenUpdating=Fa...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
メッセージボックスのボタン名変更
-
VBSの処理中一旦処理を止めて再...
-
VBSで応答不要のメッセージボッ...
-
ACCESS側からEXCELの書式を設定...
-
VBA メッセージボックスを自動...
-
Application.ScreenUpdating=Fa...
-
VBA kernel32 の意味
-
エクセルVBAでクリップボード内...
-
Excelのワークシートに行を挿入...
-
Excel VBA で処理中断(DoEvents...
-
【C#】 あるイベントから別イ...
-
手動かプログラムでの起動かの判断
-
ASP.NETでのメッセージ画面を出...
-
Excel VBA 自動的に閉じるMsgBox
-
シャットダウン時のExcel強制終...
-
VBA、UserFormを前面に出力して...
-
<input type="file">タグで「キ...
-
Excel VBA 実行中に一瞬フリー...
-
「キャンセル」ボタン付きの処...
-
EXCEL VBA「Application.Displa...
おすすめ情報