2011-06-23 5 views
4

私はその聖杯を探していました。私は、ボタンがクリックされたときに(隠された)ファイル要素であるclick()にjQueryを使用するソリューションを考え出しました。これはFireFox 4では正常に動作しますが、ChromeとOperaは失敗します。 click()からfocus()をChrome用に変更しましたが、Operaでは何も動作しません。私はIEをテストしていませんが、私はまだ人生を激怒させたくありません。クロスブラウザの開いているファイルのブラウズダイアログ

HTML

<div class="formFile" id="profileImgContainer"> 
    <input type="file" name="profileImg" id="profileImg"> 

    <label>Profile Picture</label> 

    <div> 
     <input type="text" id="profileImgText"><input type="button" id="profileImgButton" value="Choose File"> 
    </div> 
</div> 

jQueryの

$(".formFile input[type='file']").live('change', function() 
{ 
    $(this).parents(".formFile").find("input[type='text']").val($(this).val()); 
}); 

$(".formFile input[type='button']").live('click', function() 
{ 
    $(this).parents(".formFile").find("input[type='file']").click(); 
}); 

$(".formFile input[type='text']").live('click', function() 
{ 
    $(this).parents(".formFile").find("input[type='file']").click(); 
}); 

誰でもjQueryの/ JavaScriptを使用してファイルダイアログを開くのクロスブラウザの方法を提供することができます:ここで

は、現在のコードです? I入力の相互作用(CSS :hover)を持つ必要性に起因する透過要素のトリックを使用しないなど

+1

+1「私は人生をかなり怒らせたくありません」:-) – andyb

+0

ありがとうandyb。 IEは私の存在の狂気です。それが穴に入って死んだら(あるいは、FF、Chrome、ソーセージなどで置き換えられた場合)、私と他のすべてのWeb開発者がとても幸せになるでしょう! – Bojangles

+1

もっと同意できませんでした!ところで、見たことがありますか?http://stackoverflow.com/questions/210643/in-javascript-can-i-make-a-click-event-fire-programmatically-for-a-file-input-e/3030174#3030174 – andyb

答えて

3

trigger()を使用してみてください:

$(this).parents(".formFile").find("input[type='file']").trigger('click'); 
+0

これで、FF4とChromeの機能がうまく機能しましたが、Opera 11.11ではうまく再生できません。何か案は? – Bojangles

+0

私のためにそれは働いたことがない –

+0

@サラその後、あなたは何か間違っている必要があります... – Neal

4

これは遅く、いくつかの年かもしれませんが、ここにありですJavascriptを使わずにこれを行う方法で、クロスブラウザーでもあります。あなたが問題を見つけた場合

<label> 
    Open file dialog 
    <input type="file" style="display: none"> 
</label> 

は、入力のIDを指しているラベルに属性に使用する必要があるかもしれません。

+1

私はこれまでStackOverflowで見た中で最も賢い答えだと思います。 – Greg

+1

@Gregありがとう:) –

関連する問題