2010-07-07 4 views
0

У меня есть страница, где я пытаюсь добавить детей в родительский объект.MVC частично Посмотреть jQuery datepicker удаление предыдущих сборщиков дат

На странице у меня есть ссылка «Добавить ребенка», которая вызывает ajax get, возвращая частичный вид с текстовыми полями для Ребенка. В sucess я выполняю функцию, чтобы добавить результаты в innerHTML div.

На частичном изображении у меня есть текстовое поле для даты рождения с именем «Дата рождения {id}», где {id} - это число, основанное на количестве добавленных.

В методе успеха, я тогда делаю

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

Это прекрасно работает, за последнюю дату рождения сборщика. Если я добавлю 3 детей, у BirthDate 3-го ребенка div будет установлен параметр datepicker при загрузке, но 1-й и 2-й из них потеряет дату. Добавление четвертого будет удалять datepicker с 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(); 
    } 
    }); 
} 

Кто-нибудь работать в этом?

ответ

1

Эта строка - div.innerHTML += results; - переписывает весь контент div каждый раз, когда вы добавляете новый дочерний раздел. Это означает, что вы теряете крючки событий и т. Д. На элементах, которые ранее были в файле div, даже если перезаписанные элементы используют те же самые id и т. Д. Я подозреваю, что это то, что нарушает ваши датпикеры.

Чтобы исправить это, вам нужно добавить новое содержимое к тому, что уже есть в div, а не переписывать весь контент каждый раз. Попробуйте заменить эти две строки:

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

С этим:

$('#ChildDiv').append(results); 
+0

Работал как очарование, спасибо – doug

0

Из того, что я вижу, возможно, у вас есть несколько элементов, имеющих один и тот же идентификатор. Для правильной работы jQuery необходим действительный dom. Вы можете проверить свою разметку на w3c.

Можете ли вы добавить ответ частичного просмотра на свой вопрос, а также какую версию jQuery & ui?

0

Я предполагаю, что ваш частичный вид возвращает все текстовые поля, предыдущие и новые, поскольку вы заменяете HTML-файл div результатом. В этом случае предыдущие элементы (к которым вы добавили datepickers) были удалены со страницы. Если это так, то вам нужно будет повторно добавить финалистов во все ваши BirthDate элементов.

 Смежные вопросы

  • Нет связанных вопросов^_^