私はこのようなウェブページを持っています
<html>
<head>
<title>File Upload Click Test</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
</head>
<body>
<div onclick="$('input[type=file]').click()" >CLICK SIMULATOR</div>
<input type="file"></input>
</body>
</html>
私の目標は、divでfile inputのクリックイベントを発生させることです。これはIEとChromeで期待どおりに機能するようです。ただし、Firefoxでは機能しません(divをクリックしてもファイルブラウザが開きません)。
これをFFで動作させる方法はありますか?
FFでこれを機能させる方法はありますか?
いいえ、ほとんどの一般的なバージョンのIEでは動作しません。 IEはダイアログを開きますが、ファイルを選択すると、フォームは実際に送信されません。
希望を捨てる。ファイルアップロードボックスを偽造する唯一の方法は、透過性のテクニックを使用することです。ブラウザはファイルアップロードボックスを内部で異なるレイアウトにする可能性があるため(または、参照ダイアログを含まないファイルアップロードコントロールを提供するため)動作不能なフォームになってしまう可能性が高くなります。
灰色のファイルアップロードフィールドを気に入ってください。または、プログレッシブエンハンスメントを使用して、可能な場合はFlashに置き換えてください。
これが回避策(FF)です。 HTMLビット:
<label>Upload Business Logo</label>
<input type="file" name="logo" id="logo" class="file-upload" />
<input type="text" id="text-logo" class="text-upload" readonly/>
<input type="button" id="btn-logo" class="btn-upload" alt="" />
入力ファイルタイプのCSS:
.file-upload { display:none; }
JQueryビット:
//bind click
$('#btn-logo').click(function(event) {
$('#logo').click();
});
//capture selected filename
$('#logo').change(function(click) {
$('#text-logo').val(this.value);
});
フォームの送信時に、非表示の入力ファイルがファイルをアップロードします。お役に立てれば :)