をクリックしているときにファイルを開くダイアログをHTMLで表示するソリューションが必要div
です。をdiv
クリックすると、[ファイルを開く]ダイアログボックスが開く必要があります。
入力ファイルボックスをHTMLページの一部として表示したくない。Webページの一部ではない別のダイアログに表示する必要があります。
をクリックしているときにファイルを開くダイアログをHTMLで表示するソリューションが必要div
です。をdiv
クリックすると、[ファイルを開く]ダイアログボックスが開く必要があります。
入力ファイルボックスをHTMLページの一部として表示したくない。Webページの一部ではない別のダイアログに表示する必要があります。
回答:
これはいいものです
それ<input type='file' />
自体がコントロールです。しかし、divはその上に配置され、CSSスタイルが適用されてその感触を得ます。ファイルコントロールの不透明度が0に設定されているため、divをクリックするとダイアログウィンドウが開いているように見えます。
$("#logo").css('opacity','0');
$("#select_logo").click(function(e){
e.preventDefault();
$("#logo").trigger('click');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="#" id="select_logo">Select Logo</a> <input type="file" id="logo">
IEの場合、これを追加します。
$("#logo").css('filter','alpha(opacity = 0');
document.getElementById("logo").click()
で十分であることを示しています。また、「ドラッグアンドドロップ」という別の方法も示しています。developer.mozilla.org/en-US/docs/Web/API/File/...
なぜ誰もがこれを指摘しなかった理由はわかりませんが、これはJavascriptなしでそれを行う方法であり、どのブラウザーとも互換性があります。
編集:Safariでは、でinput
非表示にするとが無効になりますdisplay: none
。より良い方法は、を使用することposition: fixed; top: -100em
です。
<label>
Open file dialog
<input type="file" style="position: fixed; top: -100em">
</label>
必要に応じて、次のように入力のへのポインティングでを使用して「正しい方法」を実行できます。for
label
id
<label for="inputId">file dialog</label>
<input id="inputId" type="file" style="position: fixed; top: -100em">
<input>
タグにはname
属性が必要です。2. for
属性が指定されている場合、<input>
ファイルタグにはが必要ですid
。
Simplicity is the ultimate sophistication
display: none
は無効になっています。回避策は、別のアプローチを使用して入力を非表示にすることです。それを反映するように答えを更新します。
実際には、不透明度、可視性、<input>
スタイリングなどのすべてのものは必要ありません。
<a href="#">Just click me.</a>
<script type="text/javascript">
$("a").click(function() {
// creating input on-the-fly
var input = $(document.createElement("input"));
input.attr("type", "file");
// add onchange handler if you wish to get the file :)
input.trigger("click"); // opening dialog
return false; // avoiding navigation
});
</script>
jsFiddleのデモ。Chrome 30.0およびFirefox 24.0でテスト済み。ただし、Opera 12.16では機能しませんでした。
これが私にとって最も効果的でした(IE8、FF、Chrome、Safariでテスト済み)。
#file-input {
cursor: pointer;
outline: none;
position: absolute;
top: 0;
left: 0;
width: 0;
height: 0;
overflow: hidden;
filter: alpha(opacity=0); /* IE < 9 */
opacity: 0;
}
.input-label {
cursor: pointer;
position: relative;
display: inline-block;
}
<label for="file-input" class="input-label">
Click Me <!-- Replace with whatever text or icon you wish to use -->
<input type="file" id="file-input">
</label>
説明:
クリックする要素のすぐ上にファイル入力を配置したので、クリックはその要素またはそのラベル(ラベル自体をクリックしたかのようにアップロードダイアログを表示します)に到達します。デフォルトの入力のボタン部分がラベルの側面からはみ出すという問題があったためoverflow: hidden
、入力とdisplay: inline-block
ラベルに必要でした。
クライアントマシンでJavaScriptがオフになっている場合はどうなりますか?すべてのシナリオで次のソリューションを使用します。javascript / jQueryも必要ありません。:
HTML
<label for="fileInput"><img src="File_upload_Img"><label>
<input type="file" id="fileInput"></label>
CSS
#fileInput{opacity:0}
body{
background:cadetblue;
}
説明:for="Your input Id"
。HTMLでは、デフォルトでクリックイベントをトリガーします。したがって、デフォルトではクリックイベントをトリガーします。jQuery/ javascriptは必要ありません。それが単にHTMLで行われるのであれば、なぜjQuery / jScriptを使用するのですか?そして、クライアントがJSを無効にしたかどうかはわかりません。JSがオフになっていても、機能は動作するはずです。
動作するjsFiddle(JS、jqueryは必要ありません)
で最初に追加し頭のタグ:
<script>
function showDialog(openFileDialog) {
document.getElementById(openFileDialog).click();
}
function fileName(openFileDialog) {
return document.getElementById(openFileDialog).value;
}
function hasFile(openFileDialog) {
return document.getElementById(openFileDialog).value != "";
}
function fileNameWithoutFakePath(openFileDialog) {
var fileName = document.getElementById(openFileDialog).value;
return fileName.substr(fileName.lastIndexOf('\\') + 1);
}
function fakePathWithoutFileName(openFileDialog) {
var fileName = document.getElementById(openFileDialog).value;
return fileName.substr(0, fileName.lastIndexOf('\\'));
}
</script>
すでにスクリプトがある場合タグ、上記の関数を追加してください。
あなたのボディまたはフォームタグに追加:
<input type="file" style="display:none" id="yourDesiredOrFavoriteNameForTheNewOpenFileDialogInstance"/>
あなたのhtmlで、ちょうどされてどんなにそのようにあなたがしたようなタイプOpenFileDialogクラスの新しいインスタンスを作成したグローバル名前がある変数、ID要素の、どこコードまたはXAMLで、どんなにしかし、スクリプトやコードで、あなたがすることができない要素の入力タイプ=「ファイル」で定義されていないものを行うグローバル関数があるので、彼の名前を入力し、[機能のプロパティを読み取りまたは呼び出します。これらの関数に、OpenFileDialogインスタンスの名前である非表示の入力type = "file"のIDを文字列として指定するだけです。
オープンファイルダイアログインスタンスをhtmlに作成する作業を簡単にするために、それを行う関数を作成できます。
function createAndAddNewOpenFileDialog(name) {
document.getElementById("yourBodyOrFormId").innerHtml += "<input type='file' style='display:none' id='" + name + "'/>"
}
ファイルを開くダイアログを削除する場合は、次の関数を作成して使用できます。
function removeOpenFileDialog(name) {
var html = document.getElementById("yourBodyOrFormId").innerHtml;
html = html.replace("<input type='file' style='display:none' id='" + name + "'/>", "");
document.getElementById("yourBodyOrFormId").innerHtml = html;
}
ただし、ファイルを開くダイアログを削除する前に、次の関数を作成して使用することにより、ダイアログが存在することを確認してください。
function doesOpenFileDialogExist(name) {
return document.getElementById("yourBodyOrFormId").innerHtml.indexOf("<input type='file' style='display:none' id='" + name + "'/>") != -1
}
本文を開くダイアログを作成したり、htmlのフォームタグを追加したりしない場合は、これにより非表示の入力type = "file"が追加されるため、上記のcreate関数を使用してスクリプトで実行できます。 :
function yourBodyOrFormId_onload() {
createAndAddNewOpenFileDialog("openFileDialog1");
createAndAddNewOpenFileDialog("openFileDialog2");
createAndAddNewOpenFileDialog("openFileDialog3");
createAndAddNewOpenFileDialog("File Upload");
createAndAddNewOpenFileDialog("Image Upload");
createAndAddNewOpenFileDialog("bla");
//etc and rest of your code
}
あなたのボディまたはフォームタグの近くに、あなたが追加したことを確認してください:
onload="yourBodyOrFormId_onload()"
すでに実行している場合は、上記のこの行を実行する必要はありません。
ヒント:プロジェクトまたはWebサイトに新しいJScriptファイルをまだ追加していない場合は追加できます。このファイルでは、開いているすべてのファイルダイアログ関数をスクリプトタグやhtmlまたはwebフォームページから離して配置し、それらをこのJScriptファイルからhtmlまたはwebフォームページに追加しますが、htmlまたはwebフォームページをJScriptファイルにリンクすることを忘れないでください。JScriptファイルを頭の htmlページにドラッグするだけで実行できますタグ。ページが単純なhtmlではなくWebフォームであり、headタグがない場合は、機能するようにどこかに配置します。そのJScriptファイルでグローバル変数を定義することを忘れないでください。その値は、文字列としての本体またはフォームIDです。JScriptファイルをHTMLまたはWebフォームページにリンクした後、フォームの本体のonloadイベントを実行し、その変数の値を本体またはフォームIDに設定できます。次に、JScriptファイルで、ドキュメントの本文または1ページのフォームのIDを指定する必要がなくなり、その変数の値を指定するだけです。その変数bodyId、formId、bodyOrFormId、またはその他の任意の名前を呼び出すことができます。
頑張って!
私の知る限り、あなたはまだ<input type="file">
要素が必要です、そしてあなたはそれをスタイルアップするためにquirksmodeからのもののいくつかを使うことができます
唯一必要なの<input type="file">
は、divの上に透明なFlashムービーを埋め込むことです。次に、ユーザー生成のクリックイベント(Flash 10の新しいセキュリティルールに準拠)を使用して、FlashのFileReference.browseの呼び出しをトリガーできます。
quirksmodeの方法に対する追加の依存関係を提供しますが、見返りに多くのイベント(組み込みの進行状況イベントなど)を取得します。
使用できます
$('<input type="file" />').click()