Question

Je me sens un peu idiot de poster ceci, car cela semble assez simple d'après ce que j'ai lu, mais je ne sais pas pourquoi je vois toujours 1 comme valeur pour files.length.

<html>
<head>
<script src="http://code.jquery.com/jquery-1.7.2.js" type="text/javascript"></script>
<script>
    $(document).ready(function() {
        var button = $('#button');
        button.click(function(){    
           var files = $('#files');
           alert(files.length);
        });
     });
</script>
</head>
<body>
  <form>
    <input type="file" id="files" multiple="" />
    <input type="button" id="button" value="Upload" />
  </form>
</body>
</html>         
Était-ce utile?

La solution

Remplacez la ligne d'alerte par :

alert(files[0].files.length);

Cela fonctionne parce que ce que vous essayez de faire est d'obtenir l'attribut files de l'élément DOM d'entrée qui est le Liste des fichiers objet.Vous voulez alors le attribut de longueur de la FileList qui vous indiquera combien d'objets ont été sélectionnés.Vous sélectionnez d'abord l'élément d'entrée avec jQuery, mais le résultat d'une sélection jQuery telle que $("#files") est une collection jQuery, vous voulez l'objet DOM sous-jacent pour l'élément d'entrée car seul celui-ci a l'attribut files.Chaque objet jQuery se fait passer pour un tableau afin que vous puissiez utiliser le déréférencement de tableau standard pour obtenir l'élément DOM sous-jacent.(Voir: http://api.jquery.com/get/ )

Essayez-le !

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top