Вопрос

Я чувствую себя немного глупо, публикуя это, поскольку из того, что я читал, это кажется довольно прямолинейным, но я не знаю, почему я всегда вижу 1 в качестве значения для 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>         
Это было полезно?

Решение

Измените строку предупреждения на:

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

Это работает, потому что то, что вы пытаетесь сделать, это получить атрибут files элемента input DOM, который является Список файлов объект.Затем вы хотите, чтобы атрибут длины из списка файлов, который сообщит вам, сколько объектов было выбрано.Сначала вы выбираете элемент ввода с помощью jQuery, однако результатом выбора jQuery, такого как $("#files"), является коллекция jQuery, вам нужен базовый объект DOM для элемента ввода, потому что только он имеет атрибут files.Каждый объект jQuery маскируется под массив, поэтому вы можете использовать стандартное разыменование массива для получения базового элемента DOM.(См.: http://api.jquery.com/get/ )

Попробуй это!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top