Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   each не может перебрать массив файлов. Плизззз (https://javascript.ru/forum/dom-window/57949-each-ne-mozhet-perebrat-massiv-fajjlov-plizzzz.html)

espltd 27.08.2015 15:20

each не может перебрать массив файлов. Плизззз
 
Все доброго дня! Подскажите пожалуйста умные люди. Что делаю не так?

Есть инпут с multiple. Выбираю 10 картинок например и хочу этот массив перебрать. Рядом с инпутом есть кнопка вызывающая функцию в которой уже хочу этот массив файлов хотябы в логах увидеть. Что делаю не так?

Вот так пробовал

<script type="text/javascript">
	 $(document).ready(function(){
	   
     $('#ajaxupload').click(function(){
        
        
        
        var res = $('#file').val();
             
        
        $.each(res, function(index, value){
            alert('value' + value);
        });
     
    });
});

</script>




<input id="file" type="file" name="files[]" multiple="multiple" />

        <input id="ajaxupload" type="button" value="Загрузить" />

ksa 27.08.2015 15:33

Цитата:

Сообщение от espltd
Что делаю не так?

Подойдет как ответ?

<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<script src='http://code.jquery.com/jquery-latest.js'></script>
<!--
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
$(function(){
	$('#ajaxupload').click(function(){
		var res = $('#file').val();
		alert(typeof res);
	});
});
</script>
</head>
<body>
<input id="file" type="file" name="files[]" multiple="multiple" />
<input id="ajaxupload" type="button" value="Загрузить" />
</body>
</html>

laimas 27.08.2015 15:34

http://habrahabr.ru/post/120370/

ksa 27.08.2015 15:36

Цитата:

Сообщение от espltd
Вот так пробовал

Вот есть примеры как пользоваться...
http://habrahabr.ru/post/120370/

ksa 27.08.2015 15:36

laimas, :lol:

laimas 27.08.2015 15:39

Что смешного, один и тот же "найти"? :)

espltd 27.08.2015 15:41

Не совсем понимаю, а смысл того что мне просто string возвращает. Меня же названия интересуют:agree: Я в яваскрипте не силен. ПХП!!! можно чуть подробнее. не очень то от моего кода отличается за исключением typeof

laimas 27.08.2015 15:44

Вам чего надо то, загрузить множество изображений? Как, Ajax? Ну так извольте сначала изучить предмет input multiple, чтобы знать, что это такое.

ksa 27.08.2015 15:47

Цитата:

Сообщение от laimas
Что смешного, один и тот же "найти"?

Ссылка одна и та же... :)

ksa 27.08.2015 15:47

Цитата:

Сообщение от espltd
Не совсем понимаю, а смысл того что мне просто string возвращает.

Ты к строке пытаешься применить методы массива... Разве не понятно?

espltd 27.08.2015 15:51

Цитата:

Сообщение от laimas
laimas

Ну что вы в самом деле, я по вашему не знаю что такое multiple. Просто объясните плиз как правильно перебрать массив и все. Мне не надо чтобы вы за меня все написали. Сам умею! Ну встрял не много с кем не быват

espltd 27.08.2015 15:59

Сделал так, но ведь так тоже не работает

var res = [];
        
        var res = $("#file").val();
             
        
        $.each(res, function (index, value){
            console.log('index: ' + index, 'value: ' + value );
        });

laimas 27.08.2015 16:01

Цитата:

Сообщение от espltd
Просто объясните плиз как правильно перебрать массив

Массив чего?

Цитата:

Сообщение от espltd
я по вашему не знаю что такое multiple

Не знаете, если пытаетесь делать что-то непонятное.

espltd 27.08.2015 16:04

Будете издеваться или все же подскажите

laimas 27.08.2015 16:10

Я еще и издеваюсь?! :lol:

Вы же представления не имеете, что значит этот multiple, поэтому и пытаетесь делать невообразимое, а изучать не хотите. А я значит издеваюсь, вот юмористы. :)

espltd 27.08.2015 16:17

дайте пожалуйста ссылку хорошую-подробную про мультипл

laimas 27.08.2015 16:20

Так какие проблемы - набираем в своем любимом "гугле" что-то: Ajax загрузка файлов, input multiple и т.п., и ссылок будет немеряно, а вот какая вам нужна, это уж сами выбирайте, если то что вам дали, а там самый минимум, который поясняет "кухню" input multiple, вам непонятен.

espltd 28.08.2015 07:32

дак разницу в input и multiple я знаю. Вопрос в прочтении принимаемой строки. Ладно. Спасибо на этом

laimas 28.08.2015 08:00

Какой строки? Не получите вы имена всех выбранных файлов обращаясь к value - значение будет содержать имя последнего выбранного файла, и это строка, а не массив.

Вам давали ссылку для изучения. Коллекцию files (массив выбранных для загрузки файлов) нужно в цикле обходить, в котором можно получить и имя файла, и его размер и т.д. Чего не понятного?

<!DOCTYPE HTML> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<style>

</style> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script> 
$(function() {
    $('input').change(function() {
        $.each(this.files, function() {
            alert('Name: ' + this.name + '\nType: ' + this.type + '\nSize: ' + this.size)
        })
    })
});
</script>     
</head> 
<body>
<input type="file" multiple="" />
</body> 
</html>

espltd 28.08.2015 08:12

ДА это понятно, что не получу. Меня интересует как верно массив циклом перебрать и все. В пхп я бы сделал нечто foreach($files as $item) и вывел item, а так как в яваскрипте я чайник, я и хотел спросить как именно правильно перебрать массив и все. не более того.

laimas 28.08.2015 08:15

foreach($files as $item) - не получите вы так в РНР имени файла. Надо изучать то с чем работать нужно, там то собственно несколько строк и все, вы либо не читали вообще, либо не вникали и не пробовали разобраться.

espltd 28.08.2015 09:24

да прочитал я вашу ссылку данную на хабр, но там не описано про цикл ничего. Я про each спрашиваю. Все остальное по шагам я уже давным давно сделал. Сейчас то мне перебрать надо элементы массива. Ну есть недопонимания

espltd 28.08.2015 09:55

Разобрался. Просто подумал получше. Но интересно вот что. С циклом each почему-то не перебирались элементы, а циклом for все как на ладони. Зачем мучился с этим each. Жеееесть

laimas 28.08.2015 09:55

А причем тут цикл? Вы пытаетесь пройти циклом строковое значение, а это означает, что вы не знаете из чего нужно получать имена файлов коллекции выбранных для загрузки. По ссылке и описывается что этот параметр можно получить обратившись к это коллекции файлов, и указаны свойства объекта, ОДНОГО объекта, каждого файла в коллекции! Или это не понятно?
Обходом этой коллекции в цикле, при чем не обязательно each, можно получить информацию о каждом из файлов коллекции.

Как вы читаете, что там не понятно, ума не приложу. Как и а РНР - foreach($files as $item) выведу $item и вуаля.... Как бы не так. Если $files вы присвоили массив $_FILES['keyname'] (что собственно и не имеет смысла), то $item, это массив описывающий парметры загруженного файла из коллекции загруженных, но никак не имя файла. Что нужно сделать чтобы получить имя файла? Нужно получить ключ 'name' этого массива. Чем это разница от JS, где нужно знать что содержит имя файла, как и в РНР нужно знать, что имя файла содержит $_FILES['keyname']['name']? Что в РНР для получения всех имен нужен цикл, а в JS волшебным образом само получается? Наверное и ежу понятно, что тоже нужен цикл.

Чтобы foreach($files as $item) и $item это имя файла, то $files, это должен быть массив имен всех загруженных файлов, иначе фиг.

espltd 28.08.2015 10:07

Мы с вами на разных языках. Что вы прицепились к foreach($files as $item) ???. Разумеется переборка массива. И ни что иное. Я просто как пример привел. ВЫ вообще вопрос мой читали? Я уже столько раз написал, что меня лишь интересовала переборка массива в котором по ключам содержатся инфа о фалах. Ужаасс. Вы тоже умника из себя стройте. Знаете экстраполярные парадигмы дизъюктивных межпространственных графов в теории исключений противоположных по смыслу показателей?

laimas 28.08.2015 10:19

Цитата:

Сообщение от espltd
Знаете экстраполярные парадигмы дизъюктивных межпространственных графов в теории исключений противоположных по смыслу показателей?

И Бином Ньютона... Вот именно не надо умничать, и не обращать внимания на мировые проблемы решая простую и конкретную. Я без всякой мысли об умничать, и вы тоже перечитайте, что я написал. А я написал о том, что в РНР вы знаете, что нужно обойти в циклом, и слава богу что знаете где получить. А отсюда и вопрос - чем же отличается JS от РНР, если нечто нужно получить из массива? Ничем, так чего же вы ожидаете по ссылке но там не описано про цикл ничего о массиве, если это и так ясно? Главное знать где это и из чего взять. Вы же постоянно твердите о each.

Да что за поколение растет, говоришь где нужно читать, нихрена не вникают, гнут свое, и при этом еще и виноватым остаешься. Вот деловые блин. )

espltd 28.08.2015 10:52

Ну мое поколение уже выросло :p Я же не малолетка. Ну тупанул что-то с этой задачкой. Да уже решил. Спасибо за нравоучение:thanks:

espltd 28.08.2015 11:05

Блин. а почему в Alert то попадает [object Object] ??? В логах ведь все отлично. Извините за глупые вопросы(

var inputFile = document.getElementById('file').files;
       
        for(i=0; i < inputFile.length; i++){
            var res = inputFile[i];

            alert(res);
        }

ksa 28.08.2015 11:09

Цитата:

Сообщение от espltd
а почему в Alert то попадает [object Object] ?

Алерт врать не будет - это действительно объект. ;)
Это продемонстрировано в сообщении №19
http://javascript.ru/forum/dom-windo...tml#post386076

espltd 28.08.2015 11:12

так так так. ВОт минусы быть чайником в яваскрипт. Надо подумать. Мне надо обратится к fileName:blink:

ksa 28.08.2015 11:19

Цитата:

Сообщение от espltd
Надо подумать. Мне надо обратится к fileName

Т.е. ту ссылку, что мы дали в самом начале ты так и не читал пока... :cray:

laimas 28.08.2015 11:19

А говорили читали, а я ведь и пример показывал.

var res = inputFile[i].name;

espltd 28.08.2015 12:48

не не. Ребят вы чего. Читал читал. Просто пока еще есть кое какая каша по выводу. Просто никогда ранее подобного даже близко не делал. Обычно плагины использовал., а тут решил все же написать, чтобы на будующее глупых вопросов не задавать))

espltd 28.08.2015 12:51

Ура, добился того чего хотел. Блин радость то какая :dance:


$('.loadfile').change(function(){
            
     var inputFile = document.getElementById('file').files;
       
        for(i=0; i < inputFile.length; i++){
            var fileName = inputFile[i].name;
            
            if($('#files').val() == '') $('#files').val(fileName); 
            else $('#files').val($('#files').val() + '|' + fileName); 
        }         
        
     });

laimas 28.08.2015 13:15

У поля file значение value изменить нельзя, но только для чтения.

PS. А нет, во что то другое запись files

ksa 28.08.2015 13:34

espltd, мои 5коп... ;)

$('.loadfile').change(function(){
	var inputFile = document.getElementById('file').files;
	var dlm='';
	for(i=0; i < inputFile.length; i++){
		var fileName = inputFile[i].name;
		$('#files').val($('#files').val() + dlm + fileName); 
		dlm='|';
	};
});


Часовой пояс GMT +3, время: 19:40.