我试图在表单帖子之前允许多个文件上传。我希望用户只能看到一个文件上传元素,并且每次选择一个文件时,都会显示一个新的<li>
,其中包含文件名和一个图像/链接,用于从集合中删除该特定文件。有一个jQuery MultiFile插件可以实现我想要的功能,但是我无法让自定义样式以我想要的方式工作,因此我正在自行设计。使用jQuery多文件上传
到目前为止,我有下面的代码。它成功添加<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);
});
});
啊,非常接近。所以问题在于,在删除中,不是应该删除的新输入,而是前一个。新的一个是空的,所以这是一个蠢货。但是,当点击删除图像时,我想确保从页面中删除适当的(现在隐藏的)文件元素,因此它不会被发送到集合中。这是通过特定ID访问它的原因。当点击事件与你的建议一起工作时,我会玩这个,但是如果你有其他想法基于那个增加的信息,那么就是holler。谢谢! – nkirkes 2010-11-21 01:42:21
好吧,所以我通过添加一个新变量来保存父文件元素,然后将'input.remove'更改为'parentInput.remove',从而使其工作(在Chrome中,未测试IE或FF)。瞧。真棒,男人,感谢您的帮助! – nkirkes 2010-11-21 02:42:25
如果我想像Mannish那样做同样的事情,同时选择多个文件,我如何让它们全部出现在浏览器窗口中,每个窗口都有一个相应的删除按钮? – serengeti12 2011-07-02 11:50:06