Задать вопрос

Как разобраться с validation.unobtrusive?

Всем привет! Парни, я слегка туповат в вопросах JavaScript, помогите мне пожалуйста разобраться с одним небольшим уроком.
Я разрабатываю сайт на платформе Asp.Net MVC (хотя это не особо важно). Суть в том, что после динамического добавления контента на страницу для этого самого элемента не работает валидация. В принципе, оно и понятно, ведь unobtrusive валидатор парсит документ только один раз при загрузке и ничего не знает о новых элементах. В общем-то на StackOverflow нашёлся достаточно простой способ как это исправить (путём удаления всех добавленных правил и повторного парсинга документа), но мне показалось, что это как-то не по фен-шую, и я решил не искать лёгких путей.
Таким образом был нагуглен вот такой урок xhalent.wordpress.com/2011/01/24/applying-unobtrus...
в котором автор предлагает просто-напросто добавить новые элементы в существующий массив правил и всё якобы заработает.
В общем я сделал всё по уроку, но в итоге ничего не заработало. Парни, у кого время есть - гляньте сам урок, там немножко совсем). После небольшого разбора выяснилось, что проблема была вот в этой строчке
$.validator.unobtrusive.parse(selector);
Далее приведу кусок самой функции parse (это функция validate.unobtrusive).
$(selector).find(":input").filter("[data-val=true]").each(function () {
                $jQval.unobtrusive.parseElement(this, true);
            });

Таким образом, насколько я понимаю работу JQuery, selector - это родительский элемент, а функция parse при помощи метода find() ищет дочерние элементы Input Этого родительского объекта.
Но автор статьи утверждает, что использовать его код нужно вот так:
$.validator.unobtrusive.parseDynamicContent('form input:last');

Т.е. он передаёт в свой плагин в качестве selector (тот самый, который дальше передаётся в parse) сам input, а не его родителя. Таким образом функция parse начинает делать find в этом Input и, естественно, ничего не находит. И в итоге никакие новые элементы в правила не добавляются. Стоило мне поменять селектор не на инпут, который надо валидировать, а на его родителя, как find сразу опознал дочерние инпуты, добавил их в список и всё прекрасно заработало.
Но объясните мне тогда, почему автор в своём примере пишет, что надо передавать сам Input? А в комментариях к статье пишут, что всё прекрасно работает. Может я что не так делаю? Заранее спасибо!
  • Вопрос задан
  • 2970 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы