MVC部分查看jQuery datepicker删除以前的日期选择器

时间:2010-07-07 22:53:22

标签: jquery asp.net-mvc partial-views jquery-ui-datepicker

我有一个页面,我试图将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();
    }
  });
}

有人碰到过这个吗?

4 个答案:

答案 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)

.live() – jQuery API

jQuey.live怎么样?

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