我有一个页面,我试图将Child添加到Parent对象。
在页面上,我有一个链接,“添加孩子”,调用ajax get,返回带有Child的文本框的部分视图。在成功中,我正在执行一项功能,将结果添加到div的innerHTML中。
在部分视图中,我有一个Birthdate的文本框,名为“Birthdate {id}”,其中{id}是一个基于已添加的数量的数字。
在成功方法中,我正在做一个
$("#BirthDate" + childAdded).datepicker();
这适用于最新的Birthdate日期选择器。如果我添加3个孩子,第3个孩子div的BirthDate将会加载一个日期选择器,但是第1个和第2个将失去日期选择器。添加第4个将从第3个中删除日期选择器。
代码:
function addChild() {
$.ajax({
type: "GET",
url: "/Home/AddChild?childNumber=" + $("#CurrentNumberOfChildren").val(),
data: "{}",
contentType: "text/html",
dataType: "html",
success: function (results) {
var div = document.getElementById('ChildDiv');
div.innerHTML += results;
$("#CurrentNumberOfChildren").val(parseInt($("#CurrentNumberOfChildren").val()) + 1);
var numberOfChildren = $("#CurrentNumberOfChildren").val();
$("#BirthDate" + numberOfChildren).datepicker();
}
});
}
有人碰到过这个吗?
答案 0 :(得分:1)
这一行 - div.innerHTML += results;
- 每次添加新子节时都会重写div
的整个内容。这意味着你正在丢失以前在div
中的元素上的事件挂钩等,即使重写的元素使用相同的id
等等。我怀疑这是破坏你的datepickers
要解决此问题,您需要将新内容附加到div
中已有的内容,而不是每次都重写整个内容。尝试替换这两行:
var div = document.getElementById('ChildDiv');
div.innerHTML += results;
有了这个:
$('#ChildDiv').append(results);
答案 1 :(得分:0)
从我可以看到你可能有多个元素共享相同的id。 jQuery需要一个有效的dom才能正常工作。您可以在w3c验证您的标记。
您可以将部分视图的响应添加到您的问题中,还可以添加jquery&的哪个版本。 UI?
答案 2 :(得分:0)
我假设您的部分视图返回所有文本框,前面的文本框加上新文本框,因为您要用结果替换div的HTML。在这种情况下,之前的元素(您添加了日期选择器)已从页面中删除。如果是这种情况,那么您需要将日期选择器重新添加到所有 BirthDate 元素中。
答案 3 :(得分:0)