javascript - jquery 验证忽略动态添加的字段

标签 javascript jquery validation

Jquery 验证验证 DOM 中已有的表单字段以及动态添加的字段。但是,如果不是动态添加的字段通过验证,则提交表单时将忽略动态添加的字段。

截图如下: snapshot

这是我的代码:

 $('#milestone-form').validate({ // initialize the plugin
        rules: {
            "milestone[]": {
                required: true,
                minlength: 3,
            },
            "deadline[]": {
                required: true,
                minlength: 3,
            },
            "amount[]": {
                required: true,
                minlength: 2,
            },

        },
        submitHandler: function(form) {
              var data = $("#milestone-form").serialize();
                $.ajax({
                    type:"POST",
                    url:"ajax/scripts/crt_ms.php",
                    data:data,
                    success:function(data){ 
                        if(!data){alert("Something went wrong")}else{alert("Success")}
                        $(document).off();
                        },  
                    });
            },
    });
    //Validation End

  $(document).on('click', ".add", function(){
  $(flieds).insertAfter($(this).closest("#fields"));
  $('.field').each(function() {
  $(this).rules('add', {
    required: true,
        });
    });
}); 

$(".save-ms").click(function(){
    if($('#milestone-form').valid()){
        //$("#milestone-form").submit();
        alert("POSTED");
         return false;
    } else { alert("ERROR");}
});

我所有的<input>元素有一个 class=".field"属性。

另外,我注意到一件事,所有动态字段都没有得到错误标签,而是只有一个类将其定义为无效。

我一整天都在尝试这样做,但就是没有发生。

最佳答案

很简单。 Jquery 验证不会验证具有相同名称的多个元素。

所以我找到的解决方案是here , 最初来自 here

我只需要添加这个。

$(document).ready(function(){
$.validator.prototype.checkForm = function () {
            //overriden in a specific page
  this.prepareForm();
  for (var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++) {
      if (this.findByName(elements[i].name).length != undefined && this.findByName(elements[i].name).length > 1) {
          for (var cnt = 0; cnt < this.findByName(elements[i].name).length; cnt++) {
              this.check(this.findByName(elements[i].name)[cnt]);
          }
      } else {
          this.check(elements[i]);
      }
  }
  return this.valid();
},
};

关于javascript - jquery 验证忽略动态添加的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33722927/

相关文章:

jQuery 验证表单提交上的所有选项卡

javascript - 我想查看数据库中选定的数据

android - 如何拒绝 onSharedPreferenceChanged() 监听器中的更改

javascript - 字符串中是否包含Ajax?

javascript - JavaScript 的安全性 : Edit JS code for form validation in browser then submit the form

jquery - Logo float 在标题上方或上方

javascript - 将多个元素的文本克隆到一个 href 作为 mailto 主题

javascript - HTML5 - 从本地文件加载 Web SQL DB?

javascript - 在数据表中获取 tr id 值

javascript - 从 Firefox 扩展访问 Google Drive