我試圖在表單帖子之前允許多個文件上傳。我希望用戶只能看到一個文件上傳元素,並且每次選擇一個文件時,都會顯示一個新的<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