2011-04-08 82 views
2

我想克隆文件輸入表單,每次我選擇一個文件然後單擊「添加更多」克隆文件輸入,但它已複製選定的文件在輸入中。空文件輸入從.clone()

<input type="file" /> 
<span id="add-more-files">Add more</span> 

的jQuery:

$('#add-more-files').click(function() 
{ 
    var cloned = $(this).prev().clone(); 
    $(cloned).insertBefore($(this)); 
}); 

演示:jsFiddle

現在,無論您在克隆前一個文件之前選擇一個文件,都可以看到它選擇了相同的文件,克隆時我需要它爲空。

編輯:

我如何將能夠克隆此,指的是Neal's answer

<div class="wrap"><input type="file /></div> 
<span id="add-more-files">Add more</span> 
+0

你用什麼瀏覽器?在鉻中它被清空 – Neal 2011-04-08 17:28:58

+0

在Opera中不能清空。 – 2011-04-08 17:36:29

回答

1

你可以嘗試是:

$('#add-more-files').click(function() 
{ 
    var cloned = $(this).prev().clone(); 
    cloned.val(null); 
    $(cloned).insertBefore($(this)); 
}); 

UPDATE
或者如果所有的投入將是拷貝從以前的只需要創建一個新的,而不是克隆:

$('#add-more-files').click(function() 
{ 
    var cloned = $(this).prev(); 
    $('<input>',{type:cloned.attr('type')}).insertBefore($(this)); 
}); 
+0

這不起作用,出於安全原因,您不能編輯文件類型爲''的值。 – 2011-04-08 17:35:43

+0

@Drackir,他原來的代碼工作... – Neal 2011-04-08 17:36:17

+0

@Drackir @lolwut看到我的更新回答 – Neal 2011-04-08 17:39:36

1

我發現的唯一可行的解​​決方案是提供文件輸入字段作爲隱藏的模板。然後在頁面加載後創建一個克隆以提供第一個字段。

它也沒有「添加更多」按鈕,而是增加了一個新的文件輸入字段時,最後一個是填寫。

<div id="files"> 
    <input type="file" name="files" style="display: none;"> 
</div> 
function AddUploadElement() 
{ 
    var newUploadElement = $("#files").children(":first-child").clone(); 
    newUploadElement.css("display", ""); 

    $("#files").append(newUploadElement); 
} 

$(document).ready(function() 
{ 
    AddUploadElement(); 

    $("#files").on("change", "input", function() 
    { 
     if ($(this).is(":last-child") == true) 
     { 
      AddUploadElement(); 
     } 
    }); 
}); 

克隆的部分是重要的,因爲模板輸入字段可能具有其他屬性。

0

jquery.fileupload插件繞過清除文件輸入這樣的問題:

var inputClone = input.clone(true); 
$('<form></form>').append(inputClone)[0].reset(); 
input.after(inputClone).detach(); 

即克隆輸入,追加到臨時形式將其復位,拆下輸入,使得它可以被附加到表格連續。

那麼你可以input.replaceWith(inputClone);