Я пытаюсь разрешить загрузку нескольких файлов до публикации формы.Я хотел бы, чтобы пользователь видел только один элемент загрузки файла, и каждый раз, когда файл выбирается, показывается новый <li>
, который содержит имя файла и изображение / ссылку для удаления этого конкретного файла из коллекции.Есть плагин jQuery MultiFile, который делает то, что я хочу, но я не могу заставить собственный стиль работать так, как я хочу, поэтому я катлю свой собственный.Он успешно добавляет <li>
, скрывает элемент загрузки файла с новым выбранным файлом и добавляет пустой элемент загрузки файла на страницу, чтобы пользователь мог выбрать новый файл.Я изо всех сил пытаюсь должным образом управлять удалением элементов и, хотя это не так сложно, я смотрю на это достаточно долго, и теперь мне кажется, что я все делаю неправильно.Я надеюсь, что у других может быть некоторое понимание, подсказки, чтобы убрать это (то есть сделать это более элегантным), и тому подобное.Код ниже.
HTML:
<div id="product-image-area" class="group" style="border-bottom: none; padding-top: 0">
<ul id="photos" class="nobull">
<li id="no-product-images-msg" class="" >
<%= Html.Image("no-photos.png") %>
</li>
</ul>
</div>
<div id="upload-area">
<h4 class="st">Upload an image</h4>
<p class="note">Allowed file types are .gif, .jpg, .jpeg, and .png</p>
<p id="file-input" class="st sb"><input class="photo-upload" id="VenuePhotos_0" name="VenuePhotos[]" type="file" /></p>
</div>
Сценарий:
$(function () {
$('.photo-upload').live('change', function () {
var fileCount = new Number($(this).parent().children('.photo-upload').length);
$('#photos').append('<li id="venue_photo_' + (fileCount - 1) + '">' + $(this).val() + '<img title="' + (fileCount - 1) + '" src="/vh/public/images/icon-delete.png" class="delete" /></li>');
$(this).parent().append(
$(this).clone().attr('id', 'VenuePhotos_' + fileCount)
);
$(this).hide();
});
$('.delete').live('click', function (e) {
var index = $(e).attr('title');
$('#file-input').children('.photo-upload').remove('#VenuePhotos_' + index);
$('#photos').children().remove('#venue_photo_' + index);
});
});