Проблема с imagesPreview
Здравствуйте, не могу понять почему когда я загружаю к примеру 3 картинки (через Multiple), то в превью они отображаются не по порядку как я выбрал. Т.е. 2,1,3
Как можно сделать чтобы отображались по порядку то что я выбрал через CTR ? (1,2,3) $(function() { var imagesPreview = function(input, placeToInsertImagePreview) { if (input.files) { var filesAmount = input.files.length; for (i = 0; i < filesAmount; i++) { var reader = new FileReader(); reader.onload = function(event) { var hrava = Math.random(); $($.parseHTML('........')).attr('src', event.target.result).appendTo(placeToInsertImagePreview); } reader.readAsDataURL(input.files[i]); } } }; $('#gallery-photo-add').on('change', function() { imagesPreview(this, 'div.gallery'); }); }); |
deatlink,
onload -- работает асинхронно -- когда картинка загрузится |
хотя я вижу что если через CTR выбираю первую, потом вторую, то мною выбранная вторая получается первой...
|
т.е выбираю через ctr la.png, ka.png, ca.png
то в строке "ca.png" "ka.png" "la.png" по этому мною выбранную первую la.png отображает последней. Можно как то вывести с конца? т.е. первую мною выбранную |
deatlink,
:-? |
понял что вы написали, onload отобразит картинки которые загрузились. Как сделать чтобы отобразить результат после того как все картинки загрузились?
|
deatlink,
в onload заполнять массив картинками и проверять его длину если arr.length== numer то ... |
я в этом очень слаб, не могли бы помочь это сделать? :)
|
просмотр загружаемых картинок
deatlink,
<!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> .gallery img{ height: 100px; width: auto; } </style> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script> $(function() { var imagesPreview = function(input, placeToInsertImagePreview) { var count = 0; var arr = [].map.call(input.files, function(src, i) { count = i + 1; var reader = new FileReader; reader.onload = function(event) { arr[i] = event.target.result; count--; if (!count) arr.forEach(function(src) { $("<img>", { src: src }).prependTo(placeToInsertImagePreview) }) }; reader.readAsDataURL(src); return reader }) }; $("#gallery-photo-add").on("change", function() { imagesPreview(this, "div.gallery") }) }); </script> </head> <body> <div class="gallery"></div> <input id="gallery-photo-add" name="" type="file" multiple=""> </body> </html> |
когда выбираю в окне первый файл, а потом другие то первый в конец выводится(
|
deatlink,
похоже порядок зависит только от имени файла. |
deatlink,
может appendTo заменить на prependTo, больше пока мыслей нет, смотрите код выше. |
спс помогло
|
только если я дополняю
$($.parseHTML('<br><br><img style="width:200px; margin:0 10px;float: left;"><input style="width:300px;height: 23px;" name="imgtitle[]" type="text" placeholder="тайтл" /><input style="width:300px;height: 23px;" name="imgalt[]" type="text" placeholder="альт" /><br><div style="clear:both;"></div>')).prependTo(placeToInsertImagePreview); то при отправке POST он почему то вставляет значение для нижнего (последнего фото) т.е. не для него выводяся поля доп input... |
Цитата:
|
У вас есть скайп? или ICQ? напишите в личку, очень нужна помощь... по этому поводу... буду благодарен...
|
deatlink,
может вы так хотите? <!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> .gallery img{ height: 100px; width: auto; } </style> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script> $(function() { var imagesPreview = function(input, placeToInsertImagePreview) { var count = 0; var arr = [].map.call(input.files, function(src, i) { count = i + 1; var reader = new FileReader; reader.onload = function(event) { arr[i] = event.target.result; count--; if (!count) arr.forEach(function(src) { $($.parseHTML('<br><br><img style="width:200px; margin:0 10px;float: left;" src="'+src+'"><input style="width:300px;height: 23px;" name="imgtitle[]" type="text" placeholder="тайтл" /><input style="width:300px;height: 23px;" name="imgalt[]" type="text" placeholder="альт" /><br><div style="clear:both;"></div>')).prependTo(placeToInsertImagePreview); /* $("<img>", { src: src }).prependTo(placeToInsertImagePreview)*/ }) }; reader.readAsDataURL(src); return reader }) }; $("#gallery-photo-add").on("change", function() { imagesPreview(this, "div.gallery") }) }); </script> </head> <body> <div class="gallery"></div> <input id="gallery-photo-add" name="" type="file" multiple=""> </body> </html> |
Да, но почему-то если я загружаю 3 картинки и заполняю эти два инпута первому, то после сохранении (заливки в базу) он применяет к последней
|
deatlink,
вам наверно нужен, специалист по серверу |
Вы думаете эта проблема уже в php?
|
Цитата:
|
deatlink,
или вводить скрытое поле для src |
Цитата:
|
deatlink,
счас... |
deatlink,
увы, не знаю как сохранить порядок выбора фото... но чтоб описание и фото совпадали, нельзя менять appendTo. вариант ниже <!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> .gallery img{ height: 100px; width: auto; } </style> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script> $(function() { var imagesPreview = function(input, placeToInsertImagePreview) { var count = 0; var arr = [].map.call(input.files, function(file) {return file}); arr.forEach(function(file,i) { count = i + 1; var reader = new FileReader; reader.onload = function(event) { arr[i] = event.target.result; count--; if (!count) arr.forEach(function(src) { $($.parseHTML('<br><br><img style="width:200px; margin:0 10px;float: left;" src="'+src+'"><input style="width:300px;height: 23px;" name="imgtitle[]" type="text" placeholder="тайтл" /><input style="width:300px;height: 23px;" name="imgalt[]" type="text" placeholder="альт" /><br><div style="clear:both;"></div>')).appendTo(placeToInsertImagePreview); }) }; reader.readAsDataURL(file); }) }; $("#gallery-photo-add").on("change", function() { imagesPreview(this, "div.gallery") }) }); </script> </head> <body> <div class="gallery"></div> <input id="gallery-photo-add" name="" type="file" multiple=""> </body> </html> |
=(
|
а если как то описание вывести тоже через prependTo ?
|
deatlink,
смена порядка ничего не дала, внутри порядок идёт по алфавиту, а не по тому как добавили (возможно я что-то упускаю, но больше мыслей нет) |
да тоже такое ощущение)
|
а что если эти два input взять в div и присвоить им ID
к примеру если загружаем 3 фото то будут 1, 2, 3 и вывести с конца Т.е. 3, 2 , 1... Можно так? |
deatlink,
нельзя!!! всё зависит от имени файла, если имена именно такие 1, 2, 3 то вариант ниже. <!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> .gallery img{ height: 100px; width: auto; } </style> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script> $(function() { var imagesPreview = function(input, placeToInsertImagePreview) { var count = 0; var arr = [].map.call(input.files, function(file) {return file}) arr.reverse(); arr.forEach(function(file,i) { input.files[i] = file; count = i + 1; var reader = new FileReader; reader.onload = function(event) { arr[i] = event.target.result; count--; if (!count) arr.forEach(function(src) { $($.parseHTML('<br><br><img style="width:200px; margin:0 10px;float: left;" src="'+src+'"><input style="width:300px;height: 23px;" name="imgtitle[]" type="text" placeholder="тайтл" /><input style="width:300px;height: 23px;" name="imgalt[]" type="text" placeholder="альт" /><br><div style="clear:both;"></div>')).appendTo(placeToInsertImagePreview); }) }; reader.readAsDataURL(file); }) }; $("#gallery-photo-add").on("change", function() { imagesPreview(this, "div.gallery") }) }); </script> </head> <body> <div class="gallery"></div> <input id="gallery-photo-add" name="" type="file" multiple=""> </body> </html> |
мда... с полями беда(
|
Часовой пояс GMT +3, время: 20:46. |