繁体   English   中英

jQuery不显眼的验证没有触发动态内容加载

[英]jQuery unobtrusive validation not firing on dynamic content load

我试图解析一个动态插入的表单来添加jQuery不显眼的验证。

我有以下AJAX函数,在用户搜索时执行:

function search(el)
{
    var $this = $(el);
    var $form = $this.closest("form");
    var url = $form.attr("action");
    $results = $("#pnlSearchResults");

    $.ajax({
        type: "POST",
        url: url,
        data: $form.serialize()
    })
    .done(function(data){
        $results.html('');
        $results.html(data);

        var $editForm = $results.find("form.edit-form");
        $editForm.removeData("validator");
        $editForm.removeData("unobtrusiveValidation");
        $.validator.unobtrusive.parse($editForm);
    });
}

这会将返回实体的可编辑表单插入到页面上的<div> ,如下所示。 我有两个必填字段,但是当我从这些字段中删除值时,“必需”验证不会触发。 它似乎只发生在:

  1. 我删除了这些值。
  2. 将光标远离场地。
  3. 输入新值。
  4. 把光标拿走。
  5. 然后删除新值。

如何解决这个问题,以便在我第一次删除值时进行验证?

我找到了这个问题 ,这让我在这个页面上得到了答案。

(function ($) {
  $.validator.unobtrusive.parseDynamicContent = function (selector) {
    //use the normal unobstrusive.parse method
    $.validator.unobtrusive.parse(selector);

    //get the relevant form
    var form = $(selector).first().closest('form');

    //get the collections of unobstrusive validators, and jquery validators
    //and compare the two
    var unobtrusiveValidation = form.data('unobtrusiveValidation');
    var validator = form.validate();

    $.each(unobtrusiveValidation.options.rules, function (elname, elrules) {
      if (validator.settings.rules[elname] == undefined) {
        var args = {};
        $.extend(args, elrules);
        args.messages = unobtrusiveValidation.options.messages[elname];
        //edit:use quoted strings for the name selector
        $("[name='" + elname + "']").rules("add", args);
      } else {
        $.each(elrules, function (rulename, data) {
          if (validator.settings.rules[elname][rulename] == undefined) {
            var args = {};
            args[rulename] = data;
            args.messages = unobtrusiveValidation.options.messages[elname][rulename];
            //edit:use quoted strings for the name selector
            $("[name='" + elname + "']").rules("add", args);
          }
        });
      }
    });
  }
})($);

用法:

var html = "<input data-val='true' "+
           "data-val-required='This field is required' " +
           "name='inputFieldName' id='inputFieldId' type='text'/>";
$("form").append(html);

$.validator.unobtrusive.parseDynamicContent('form input:last');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM