0

我有一个页面,我试图将子项添加到父对象。

在页面上,我有一个链接“Add Child”,它调用 ajax get,返回带有 Child 文本框的部分视图。在成功的过程中,我正在做一个将结果添加到 div 的 innerHTML 的函数。

在局部视图中,我有一个出生日期的文本框,名为“Birthdate{id}”,其中 {id} 是一个基于已添加数量的数字。

在成功方法中,我正在做一个

$("#BirthDate" + childAdded).datepicker();

这对于最新的生日日期选择器来说效果很好。如果我添加 3 个孩子,则第 3 个孩子 div 的 BirthDate 将加载一个日期选择器,但第一个和第二个将丢失日期选择器。添加第 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();
    }
  });
}

有人遇到过这个吗?

4

4 回答 4

1

这行 -- --每次添加新子节时div.innerHTML += results;都会重写整个内容。这意味着即使重写的元素使用相同的 s 等div,您也会丢失以前在 中的元素的事件挂钩等。我怀疑这就是破坏您的日期选择器的原因。divid

要修复它,您需要将新内容附加到 中已有的内容div,而不是每次都重写整个内容。尝试替换这两行:

var div = document.getElementById('ChildDiv');
div.innerHTML += results;

有了这个:

$('#ChildDiv').append(results);
于 2010-07-07T23:16:27.700 回答
0

从我可以看到你可能有多个元素共享相同的 id。jQuery 需要一个有效的 dom 才能正常工作。您可以在w3c验证您的标记。

您能否将部分视图的响应添加到您的问题中,以及 jquery 和 ui 的版本?

于 2010-07-07T22:59:05.870 回答
0

我假设您的局部视图返回所有文本框,以前的文本框加上新的文本框,因为您正在用结果替换 div 的 HTML。在这种情况下,之前的元素(您添加了日期选择器的元素)已从页面中删除。如果是这种情况,那么您需要将日期选择器重新添加到您的所有BirthDate元素中。

于 2010-07-07T23:04:46.863 回答
0

.live() – jQuery API

jQuey.live 怎么样?

虽然选择器的改变是必要的。

于 2010-07-08T01:43:26.147 回答