Проблема с 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, время: 00:55. |