Элемент не проверяется без ненавязчивой проверки после AJAX и динамического создания с использованием MVC 3 и jQuery - PullRequest
2 голосов
/ 26 мая 2011

Вот моя проблема ...

У меня есть страница, которая изначально отображает и отображает форму AJAX, созданную с использованием Ajax.BeginForm. Введены некоторые критерии и опубликована форма AJAX. Возвращается частичное представление, которое содержит HTML-форму, созданную с использованием Html.BeginForm.

Пока все хорошо ... Все до сих пор работает нормально. Моя ненавязчивая проверка клиента прекрасно работает на элементах, созданных из частичного представления. Моя проблема возникает, когда я сейчас пытаюсь создать некоторые динамические элементы ввода (через jQuery) и вставить / добавить их в форму, созданную частичным представлением. Я не могу получить никакой ненавязчивой проверки клиента на моих динамически создаваемых элементах.

Я пытался: - клонирование существующих элементов, изменение их идентификаторов / имен и добавление их в DOM. - создание HTML-строк и вставка их в DOM.

После каждой вставки динамического элемента я пытался вызвать: - $ .validator.unobtrusive.parseElement () [новый элемент] - $ .validator.unobtrusive.parse () [новый контейнер, документ и т. д.] - $ .validator.unobtrusive.parseDynamicContent () [плагин]

Вот подробности кода jQuery ...

$("#insert").live("click", function () {
    var html = "<input type='text' value='' name='CustomerNominationVolume' id='CustomerNominationVolume' data-val-required='The Nomination (Dth) field is required.' data-val-number='The field Nomination (Dth) must be a number.' data-val='true' /><br />"
    html += "<span class='field-validation-valid' data-valmsg-replace='true' data-valmsg-for='CustomerNominationVolume'></span>";
    $("#new").html(html);
});

$("#parse").live("click", function () {
    $.validator.unobtrusive.parse(document);
});

$("#validate").live("click", function () {
    var element = $("#CustomerNominationVolume");
    var form = $(element).first().closest('form');
    form.validate().element(element);
});

Любая помощь будет принята с благодарностью!

EDIT: После некоторых дополнительных исследований и тестирования я вернулся к этому решению , чтобы определить, почему оно не работает для меня. Как оказалось, я вставлял новые элементы ввода, которые были частью списка. Поэтому имя моих новых элементов будет выглядеть примерно так: что-то [0] .id, что-то [1] .id и т. Д. *

Эти имена вызвали сбой функции $ .validator.unobtrusive.parseDynamicContent () в этой строке: $ ('[name =' + elname + ']'). rules ("add", args);

Я просто изменил это на $ ("[name = '" + elname + "']"). rules ("add", args);

Теперь все работает нормально ...

1 Ответ

12 голосов
/ 25 октября 2011

Как только вы добавили свой динамический контент, позвоните:

    $("form").removeData("validator");
    $("form").removeData("unobtrusiveValidation");
    $.validator.unobtrusive.parse("form");

Где "$ ('form')" - это селектор для вашей формы.

Это должно сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...