3 Stimmen

Gestalten einer Eingabe type="file"

Ich habe an verschiedenen Stellen darüber gelesen.

Ich habe die hier beschriebene Methode ausprobiert: http://www.quirksmode.org/dom/inputfile.html

Ich konnte es nicht zum Laufen bringen. Also habe ich eine CSS/HTML-Methode ausprobiert und es funktioniert wunderbar in Firefox, Chrome, Safari und Opera (alle aktuellen Versionen), aber nicht in (Sie haben es erraten) IE8.

Es sieht gut aus, aber wenn man es einfach anklickt, funktioniert es nicht. Wenn Sie doppelt klicken, funktioniert es.

Haben Sie eine Idee, wie man das mit einem einzigen Klick hinbekommt?

Derzeit verwende ich bedingte IE-Kommentare, um Benutzern mit IE mitzuteilen, dass sie auf die Auswahlschaltfläche doppelt klicken sollen. Die Website befindet sich derzeit im Entwurfsstadium und ist für die Benutzer noch nicht live und ich möchte dieses Problem lösen, bevor sie live geht, wenn möglich.

0voto

Gaurav Agrawal Punkte 4242

Im Grunde ist es nicht Ihr Problem tatsächlich IE nimmt eine Datei hochladen Kontrolle in unterschiedlicher Weise. Wenn Sie auf die Schaltfläche "Durchsuchen" oder "Auswählen" klicken, öffnet sich ein Dialogfeld, aber wenn Sie auf den Datei-Upload-Text klicken, wird das Textfeld fokussiert, und wenn Sie erneut auf das Textfeld klicken, wird das Dialogfeld geöffnet. Es kann sagen, dass dies ein vordefinierter Fehler im IE ist, so dass wir nichts tun können, und die meisten Benutzer kennen dieses Problem.

0voto

M-Soley Punkte 205

Wenn Sie versuchen, die Standard-Eingabe-Schaltfläche auszublenden, ohne das Standardverhalten des IE8 bei Eingabedateien zu verlieren, und auch die Cross-Browser-Unterstützung anwenden möchten, versuchen Sie

input.file{
   width:0 ; 
   height:0;
}  //supposing your file input has class of .file`   

in der css-Datei und Sie können loslegen

0voto

L84 Punkte 43740

Es ist schon eine Weile her, dass ich diese Frage gestellt habe, und im Folgenden finden Sie die Methode, die ich jetzt für die Gestaltung von Dateieingaben verwende. Diese Informationen stammen von Kabeljau . Er geht viel mehr ins Detail und enthält mehrere Beispiele, aber hier sind die Grundlagen:

HTML

 <input type="file" name="file" id="file" class="inputfile" />
 <label for="file">Choose a file</label> 

MUSS AUF JS GEPRÜFT WERDEN

<html class="no-js">
  <head>
      <!-- remove this if you use Modernizr -->
      <script>(function(e,t,n){var r=e.querySelectorAll("html")[0];r.className=r.className.replace(/(^|\s)no-js(\s|$)/,"$1js$2")})(document,window,0);</script>
  </head>
</html>

CSS

.js .inputfile {
    width: 0.1px;
    height: 0.1px;
    opacity: 0;
    overflow: hidden;
    position: absolute;
    z-index: -1;
}

.inputfile + label {
    max-width: 80%;
    font-size: 1.25rem;
    /* 20px */
    font-weight: 700;
    text-overflow: ellipsis;
    white-space: nowrap;
    cursor: pointer;
    display: inline-block;
    overflow: hidden;
    padding: 0.625rem 1.25rem;
    /* 10px 20px */
}

.no-js .inputfile + label {
    display: none;
}

.inputfile:focus + label,
.inputfile.has-focus + label {
    outline: 1px dotted #000;
    outline: -webkit-focus-ring-color auto 5px;
}

.inputfile + label * {
    /* pointer-events: none; */
    /* in case of FastClick lib use */
}

.inputfile + label svg {
    width: 1em;
    height: 1em;
    vertical-align: middle;
    fill: currentColor;
    margin-top: -0.25em;
    /* 4px */
    margin-right: 0.25em;
    /* 4px */
}

JS

;( function ( document, window, index )
{
    var inputs = document.querySelectorAll( '.inputfile' );
    Array.prototype.forEach.call( inputs, function( input )
    {
        var label    = input.nextElementSibling,
            labelVal = label.innerHTML;

        input.addEventListener( 'change', function( e )
        {
            var fileName = '';
            if( this.files && this.files.length > 1 )
                fileName = ( this.getAttribute( 'data-multiple-caption' ) || '' ).replace( '{count}', this.files.length );
            else
                fileName = e.target.value.split( '\\' ).pop();

            if( fileName )
                label.querySelector( 'span' ).innerHTML = fileName;
            else
                label.innerHTML = labelVal;
        });

        // Firefox bug fix
        input.addEventListener( 'focus', function(){ input.classList.add( 'has-focus' ); });
        input.addEventListener( 'blur', function(){ input.classList.remove( 'has-focus' ); });
    });
}( document, window, 0 ));

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X