gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:52:30 26 4
gpt4 key购买 nike

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

makeAutoComplete 函数内添加断点表明 items 始终为空,除非第二次单击添加!

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

HTML/JS( fiddle 在这里:http://jsfiddle.net/SDvF4/12/)

<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>Test!</title>
<style type="text/css">
tr.Template
{
display: none;
}
</style>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script type="text/javascript" src="http://code.jquery.com/ui/1.8.18/jquery-ui.js"></script>
<script type="text/javascript">
$(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
});
}
</script>
</head>
<body>
<table>
<tbody>
<tr class="Template">
<td>
<input id="test_0" name="test_0" class="AutoComplete" type="text"/>
<script type="text/javascript">
var testData = [{ label: "One", value: 1 }, { label: "Two", value: 2 }];

$("#test_0").data("items", testData);
$("#test_0").data("test", "JSM");
</script>
</td>
</tr>
</tbody>
</table>
<br/><br/>

<button id="addButton">Add</button>​
</body>
</html>

最佳答案

为了让它正常工作,我必须解决多个问题。

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

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

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

第 12 次修订工作正常:http://jsfiddle.net/SDvF4/12/

关于javascript - jQuery clone() 复制数据……有时……?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13865754/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com