2010-03-17 1 views
3

Mes testeurs ont découvert que si vous tapez du texte libre dans une entrée de téléchargement de fichier, puis de aucun des boutons de la page jusqu'à ce que le texte soit supprimé (de sorte que la page ne peut pas être soumis).utilisateurs Arrêtez IE frappe à l'entrée de téléchargement de fichiers

Je suis en mesure de reproduire cela avec le code ASPX suivant (sans code derrière):

<%@ Page Language="C#" AutoEventWireup="true" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
    <body> 
    <form id="form1" runat="server"> 
     <div> 
     <asp:FileUpload ID="fuTest" runat="server" /> 
     <asp:Button ID="btnSubmit" runat="server" Text="Submit" /> 
     </div> 
    </form> 
    </body> 
</html> 

(Notez que je ne l'ai pas lié tous les gestionnaires à la page, malgré cela, la page est soumise lorsque le bouton d'envoi est cliqué que si aucun texte est entré dans la zone de texte upload)

est-il possible d'empêcher les utilisateurs de taper du texte libre dans un fichier contrôle de téléchargement? Il semble que ce n'est possible que dans IE - Firefox et Chrome empêchent nativement d'entrer le texte dans les champs de saisie de téléchargement.

J'ai vu des solutions ailleurs qui cachent l'entrée et suggèrent la remplacer par une étiquette/bouton combo, mais cela semble que cela pourrait causer plus de problèmes et travailler de façon constante à travers les navigateurs.

Des pensées?

+0

J'ai une application de téléchargement avec un contrôle d'entrée de téléchargement de fichiers et j'ai trouvé que la saisie de texte libre dans le contrôle ne tient pas mes autres boutons de travail. Testé avec IE7. – DaveB

+0

@DaveB J'ai mis à jour avec un exemple autonome qui montre clairement le comportement que je décris dans IE6. – Dexter

+0

Merci d'avoir souligné cette «fonctionnalité» du contrôle dans IE. La page avec laquelle j'ai testé comportait deux formulaires et les boutons du deuxième formulaire fonctionnaient toujours, d'où mon commentaire original. – DaveB

Répondre

5

Comme par @ suggestion de Jer, j'ai pu empêcher l'entrée dans le téléchargement de fichiers sans casser une de l'autre fonctionnalité par gérer les événements keypress sur le téléchargement. Utilisation de jQuery:

$(document).ready() { 
    $('input:file').keypress(function() { 
     return false; 
    }); 
} 
2

Je ne sais pas si cela fonctionnerait comme prévu, mais avez-vous essayé: <input readonly="readonly">

+0

Cela désactive complètement l'entrée dans IE - le bouton "Parcourir" ne fonctionne plus (bien qu'il ne semble pas désactivé, il ne fait rien). Fait intéressant, ajoutant readonly = « lecture seule » ne rien dans Firefox ou Chrome – Dexter

+2

Pouvez-vous ajouter un événement qui nie toute pression de touche entrée du clavier? Encore une fois, je ne suis pas sûr que cela fonctionnerait avec l'élément de saisie de fichier - juste jeter des idées. – Jeremy

+0

La manipulation de la touche fonctionne, merci @Jer. J'ai inclus ma solution comme réponse ici. – Dexter

1

La réponse acceptée est parfaitement adaptée à tous les contrôles de fichiers existants.

Mais dans la plupart des situations pratiques, nous offrons des fonctionnalités à ajouter plus de contrôles de fichiers à la volée afin que les utilisateurs peuvent sélectionner plusieurs fichiers.

clé pour la solution dans ce cas est le .live function.

La solution sera la suivante:

$('input:file').live('keypress', function() { return false; });