[解決済み】標準的なhtmlファイル入力にファイルをドラッグドロップする。
質問
最近は、ファイルを専用のコンテナにドラッグ&ドロップして、XHR 2.でアップロードすることができます。 一度にたくさんアップロードできます。ライブ プログレス バーなどもあります。非常にクールなものです。 例はこちら
でも、そこまでのカッコよさは求めないこともあります。私が欲しいのは、ファイルをドラッグ&ドロップして、一度にたくさん--。
を標準的なHTMLファイル入力に
:
<input type=file multiple>
.
そんなことが可能なのでしょうか?ファイルドロップから正しいファイル名(?)でファイル入力を「埋める」方法はないのでしょうか?(ファイルシステムのセキュリティ上の理由から、完全なファイルパスは利用できません)。
なぜですか?
普通のフォームで送信したいから。すべてのブラウザー、すべてのデバイスに対応。ドラッグ&ドロップは、UXを向上させ、シンプルにするためのプログレッシブ・エンハンスメントに過ぎません。標準的なファイル入力のある標準的なフォーム(+
multiple
属性)は存在します。HTML5の機能拡張を加えたい。
編集
で知っています。
いくつか
ブラウザで
時々
(ほぼ常に)ファイルをファイル入力自体にドロップします。Chromeは通常そうするのですが、時々失敗して、現在のページにファイルをロードしてしまいます(フォームに入力している場合は大失敗)。フール&アプ;ブラウザープルーフしたいです。
解決方法は?
以下はChromeとFFで動作しますが、IE10+もカバーする解決策はまだ見つかっていません。
// dragover and dragenter events need to have 'preventDefault' called
// in order for the 'drop' event to register.
// See: https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Drag_operations#droptargets
dropContainer.ondragover = dropContainer.ondragenter = function(evt) {
evt.preventDefault();
};
dropContainer.ondrop = function(evt) {
// pretty simple -- but not for IE :(
fileInput.files = evt.dataTransfer.files;
// If you want to use some of the dropped files
const dT = new DataTransfer();
dT.items.add(evt.dataTransfer.files[0]);
dT.items.add(evt.dataTransfer.files[3]);
fileInput.files = dT.files;
evt.preventDefault();
};
<!DOCTYPE html>
<html>
<body>
<div id="dropContainer" style="border:1px solid black;height:100px;">
Drop Here
</div>
Should update here:
<input type="file" id="fileInput" />
</body>
</html>
を使用することになるでしょう。
addEventListener
やjQuery(など)を使ってeventハンドラを登録することができます - これは単に簡略化のためです。
関連
-
[解決済み】TypeError: $(...).DataTable は関数ではありません。
-
[解決済み】webpack: モジュールが見つかりません。Error: 解決できない(相対パスで)
-
[解決済み】ある要素を別の要素に移動させるには?
-
[解決済み】Uncaught ReferenceError。Reactが定義されていない
-
[解決済み】Reactのeslintエラーはpropsの検証で見つからない
-
[解決済み] 入力フィールドから属性を読み込むと、HTMLエンコーディングが失われる
-
[解決済み] HTML ファイルに別の HTML ファイルをインクルードする
-
[解決済み] HTMLフォームのSELECTタグ/入力の読み取り専用化
-
[解決済み] HTML Input="file" Accept Attribute File Type (CSV)
-
[解決済み】HTMLのテキスト入力で数値入力しかできない。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】webpack-dev-serverにリモート接続すると、「Invalid Host header」というメッセージが表示されます。
-
[解決済み】NodeJS "ESモジュールをロードするためにインポートを使用する必要があります。"
-
[解決済み】最大呼び出しスタックサイズ超過エラーとその修正方法とは?
-
[解決済み】コンソールがUnterminated JSX contentsエラーを投げる【終了しました
-
[解決済み】JavaScript ランタイムエラー:'$'が未定義です。
-
[解決済み】SyntaxError: JSON の位置 1 に予期しないトークン o があります。
-
[解決済み】FirefoxでGoogle Maps V3をリモートで使用すると「googleが定義されていません」と表示される。
-
[解決済み】Uncaught ReferenceError。Firebase は定義されていません。
-
[解決済み】'useState' が定義されていない no-undef React
-
[解決済み] 手動でonchangeイベントを発生させるにはどうすればよいですか?重複