Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript clone(false)仍然从原始源复制数据_Javascript_Jquery_Html_Dom - Fatal编程技术网

Javascript clone(false)仍然从原始源复制数据

Javascript clone(false)仍然从原始源复制数据,javascript,jquery,html,dom,Javascript,Jquery,Html,Dom,这篇文章是一篇后续文章,应用程序在jQuery 1.4上运行,但欢迎任何版本的建议: 目前的问题甚至是使用 rowTemplate = j('.form-denomination:first-child').clone(); 及 我可以看到newRow仍然使用firebug保存列表中第一个孩子的旧数据,无论我从网页中选择了什么 例如,如果要克隆的列表的第一个子节点是节点[0] <select id="_denominations[0].id.denominationId" class="

这篇文章是一篇后续文章,应用程序在jQuery 1.4上运行,但欢迎任何版本的建议:

目前的问题甚至是使用

rowTemplate = j('.form-denomination:first-child').clone();

我可以看到
newRow
仍然使用firebug保存列表中第一个孩子的旧数据,无论我从网页中选择了什么

例如,如果要克隆的列表的第一个子节点是节点[0]

<select id="_denominations[0].id.denominationId" class="removableDenom" name="denominations[0].id.denominationId">
    <option value="100">100</option>
    <option value="1000">1000</option>
    <option value="10000">10000</option>
    <option value="500">500</option>
    <option value="5000">5000</option>
    <option value="50000" selected="selected">50000</option>
</select>

100
1000
10000
500
5000
50000
我在节点[2]后面添加了一个新行,它看起来像

<select id="_denominations[3].id.denominationId" class="removableDenom" name="denominations[3].id.denominationId">
    <option value="100">100</option>
    <option value="1000">1000</option>
    <option value="10000">10000</option>
    <option value="500">500</option>
    <option value="5000">5000</option>
    <option value="50000" selected="selected">50000</option>
</select>

100
1000
10000
500
5000
50000
看到它仍然显示50000作为下拉框的选择,即使它在网页上显示100 发生了什么事?

下拉框仍然显示50000,甚至在网页上显示100。”

您看到的是HTML源代码。50000不是页面上显示的当前值,而是页面加载时显示的值。

它仍然显示50000作为下拉框的选择,即使它在网页上显示100


您看到的是HTML源代码。50000不是页面上显示的当前值,而是页面加载时显示的值。

您对
.clone()
的要求恐怕超出了它所能提供的范围。它不会为您更新ID;它不会为您更新名称;它不会为您清除表单数据。您必须自己完成所有这些工作—可以在模板上清除表单数据,但在插入时必须设置ID

rowTemplate = j('.form-denomination:first-child').clone();
rowTemplate.find("input[value], textarea").val("");
rowTemplate.find("select").each(function() { this.selectedIndex = 0; });
如果我们能够假设第一行的ID和名称总是类似于
[0]
,那么插入之前的更新将更容易一些:

var rowId = "[" + j('.form-denomination').length + "]";
var newRow = rowTemplate.clone();
newRow.find("[id]").each(function() { var $t = $(this); $t.attr("id", $t.attr("id").replace("[0]", rowId)); });
newRow.find("[name]").each(function() { var $t = $(this); $t.attr("name", $t.attr("name").replace("[0]", rowId)); });

恐怕你对
.clone()
的要求比它所能给予的还要多。它不会为您更新ID;它不会为您更新名称;它不会为您清除表单数据。您必须自己完成所有这些工作—可以在模板上清除表单数据,但在插入时必须设置ID

rowTemplate = j('.form-denomination:first-child').clone();
rowTemplate.find("input[value], textarea").val("");
rowTemplate.find("select").each(function() { this.selectedIndex = 0; });
如果我们能够假设第一行的ID和名称总是类似于
[0]
,那么插入之前的更新将更容易一些:

var rowId = "[" + j('.form-denomination').length + "]";
var newRow = rowTemplate.clone();
newRow.find("[id]").each(function() { var $t = $(this); $t.attr("id", $t.attr("id").replace("[0]", rowId)); });
newRow.find("[name]").each(function() { var $t = $(this); $t.attr("name", $t.attr("name").replace("[0]", rowId)); });

是否将表单数据与jQuery
.data()
合并?您似乎没有使用
.data()
,但我在另一个问题中看到了标记中隐藏的字段。
withDataAndEvents
参数引用到
.clone()
的数据是jQuery类型,而不是表单类型。“
面额[3].id.deminationId
显示为null”-您的意思是“null”被发送到服务器吗?@MattW所以我应该在克隆整行之后使用
.data()
?但我认为是用户定义数据,这里似乎有一个重复行上的锁阻止用户编辑。当提交具有如此重复行的表单时,出现了一些问题。@Dreamer您似乎不需要
.data()
,但没有任何形式的
.clone()
会为您清除表单数据。@Dreamer jQuery的
.data()
是一种将任意JS数据附加到DOM对象的机制。它与HTML表单无关。如果在要克隆的元素上使用了该功能,
.clone(false)
不会将附加的数据复制到克隆,而
.clone(true)
会。是否将表单数据与jQuery
.data()
合并?您似乎没有使用
.data()
,但我在另一个问题中看到了标记中隐藏的字段。
withDataAndEvents
参数引用到
.clone()
的数据是jQuery类型,而不是表单类型。“
面额[3].id.deminationId
显示为null”-您的意思是“null”被发送到服务器吗?@MattW所以我应该在克隆整行之后使用
.data()
?但我认为是用户定义数据,这里似乎有一个重复行上的锁阻止用户编辑。当提交具有如此重复行的表单时,出现了一些问题。@Dreamer您似乎不需要
.data()
,但没有任何形式的
.clone()
会为您清除表单数据。@Dreamer jQuery的
.data()
是一种将任意JS数据附加到DOM对象的机制。它与HTML表单无关。如果您在要克隆的元素上使用了该功能,
.clone(false)
将不会将附加的数据复制到克隆,而
.clone(true)
将默认使用参数为false的.clone()函数。所以真的很好奇克隆(true)能带来什么不同。默认情况下,clone()函数的参数为false。所以真的很好奇克隆(真)能带来什么不同。没错。似乎从firebug中看到的内容并不代表表单中要提交的内容。没错。似乎从firebug中看到的内容并不计入表单中要提交的内容。