2011-06-23 8 views
4

Je cherchais ce Saint-Graal - de belles boîtes de dialogue en HTML. Je suis venu avec une solution qui utilise jQuery à click() l'élément de fichier (caché) quand un bouton est cliqué. Cela fonctionne très bien dans FireFox 4, mais Chrome et Opera échouent. Changer le click() en focus() a fonctionné pour Chrome, mais rien ne fonctionne dans Opera. Je n'ai pas testé IE, mais je ne veux pas encore ragequit la vie.Navigateur ouvert ouvrir le fichier de dialogue

Voici le code actuel:

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(); 
}); 

Quelqu'un peut-il offrir un moyen croix navigateur d'ouvrir la boîte de dialogue de fichier en utilisant jQuery/JavaScript ? Je ne veux pas utiliser l'astuce élément transparent en raison de la nécessité d'avoir des interactions d'entrée (CSS :hover), etc.

+1

+1 pour «Je ne veux pas encore vivre ma vie» :-) – andyb

+0

Merci andyb. IE est le fléau de mon existence. S'il est entré dans un trou et est mort (ou a été remplacé par FF, Chrome, saucisses sur une assiette, etc) puis moi et tous les autres développeurs web là-bas seraient tellement plus heureux! – Bojangles

+1

ne pouvait pas être plus d'accord! BTW, avez-vous vu http://stackoverflow.com/questions/210643/in-javascript-can-i-make-a-click-event-fire-programmatically-for-a-file-input-e/3030174#3030174 – andyb

Répondre

3

Essayez d'utiliser trigger():

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

Cela fonctionne maintenant bien avec FF4 et Chrome, mais Opera 11.11 ne veut pas jouer sympa. Des idées? – Bojangles

+0

Pour moi cela n'a jamais fonctionné –

+0

@Sarah alors vous devez faire quelque chose de mal ... – Neal

4

Cela pourrait être quelques années de retard, mais est ici est une façon de le faire sans Javascript et c'est aussi un navigateur croisé.

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

Si vous rencontrez des problèmes, vous devrez peut-être utiliser l'attribut pour l'étiquette indiquant l'identifiant de l'entrée.

+1

Je pense que c'est la réponse la plus intelligente que j'ai jamais vue sur StackOverflow. – Greg

+1

@Greg Merci :) –

Questions connexes