jQuery clone()复制数据……有时……?

使用下面的示例,我有一个我正在复制的tr 。 它包含一个jQuery autocomplete 。 第一次克隆时,自动完成function不起作用,因为附加data("items")为空。 第二次单击“添加”按钮时,自动完成function正常。 此后,再次单击“添加”将生成无效的自动完成function。

makeAutoComplete函数内添加断点显示除了第二次单击Add时, items始终为null!

谁能解释这种奇怪的行为?

HTML / JS (小提琴: http : //jsfiddle.net/SDvF4/12/ )

     Test!  tr.Template { display: none; }     $(document).ready(function () { var textbox = $(".AutoComplete"); makeAutoComplete(textbox); $("#addButton").click(function () { var attrRegex = /\d+/; var template = $("tr.Template"); var newRow = template.clone(false); var newRowIndex = (template.siblings().length + 1); newRow.removeClass("Template"); newRow.find("*[id]").each(function () { var element = $(this); element.attr("id", element.attr("id").replace(attrRegex, newRowIndex)); }); newRow.find("*[name]").each(function () { var element = $(this); element.attr("name", element.attr("name").replace(attrRegex, newRowIndex)); }); newRow.insertBefore(template); newRow.find(".AutoComplete").each(function () { makeAutoComplete($(this)); }); }); }); function makeAutoComplete(textbox) { var items = textbox.data("items"); var test = textbox.data("test"); if (items == null) { if (test == "JSM") alert("ERROR: data.items not copied but data.test was!"); else alert("ERROR: data.items not copied nor was data.test!"); } textbox.autocomplete( { minLength: 0, source: items }); }    
var testData = [{ label: "One", value: 1 }, { label: "Two", value: 2 }]; $("#test_0").data("items", testData); $("#test_0").data("test", "JSM");


我必须修复多个问题才能使其工作。

首先由@pimvdb指出 – 我没有正确识别元​​素,因此第二个新行与模板行具有相同的ID。

其次,你不能简单地在已经是autocomplete的小部件上调用autocomplete autocomplete – 首先你必须销毁它:

 textbox.autocomplete("destroy"); textbox.removeData("autocomplete"); 

第12版正常工作: http : //jsfiddle.net/SDvF4/12/