javascript - 使用 jquery 部分工作的克隆验证

标签 javascript jquery html css

  1. 最初,当用户单击“下一步”按钮时,它将显示消息 因为您错过了 7 个字段。请在提交前填写。
  2. 如果用户单击“添加更多”按钮,它将获得克隆而无需 如果用户单击下一步按钮,请填写任何必填字段。这 消息仍然显示您错过了 7 个字段。请先填写 已提交
  3. 一旦用户开始填写克隆字段中的任何字段,他就会 错过了克隆和原始 div 中的其余必填字段,然后用户单击下一步按钮,它将显示错过了这么多数量的字段。
function check_for_validation_removal(element) {
    var parent_div = $(element).closest("div.cloned-row1,div.cloned-row2,div.cloned-row3,div.cloned-row4,div.cloned-row5").find("input[type='text'],#txt_schName option:selected");
    console.log(parent_div);
    console.log(parent_div.length);
    var invalid_ele = 0;
    parent_div.each(function() {
        if ($(this).val().trim().length == 0) {
            invalid_ele = invalid_ele + 1;
        } 
    });
    console.log(invalid_ele);
    if (parent_div.length == invalid_ele) {
        parent_div.each(function() {
            $(this).removeClass("required_field");
            $(this).rules('remove');
        });

        bind_validation();
        update_errors();
    }
}

我尝试在更改时添加选择器,但仍然没有成功。

$('.cloned_field').on('input','.cloned_div',function(e){
    if($(this).val().trim().length > 0)
    {

        $(this).addClass("required_field");
        var parent_div = $(this).closest("div.cloned-row1").find("input");
        parent_div.each(function () {
            $(this).addClass("required_field");
        });
    }
    check_for_validation_removal($(this));
    bind_validation(); 
});

请帮我解决我做错的地方。

提前致谢

这是 fiddle Link

最佳答案

我认为问题是,只有当附加组件部分中的字段具有值时才应验证附加字段。所以我更新了 bind_validation() 并添加了一个新函数 addRemoveCloneValidation() 并删除了与问题无关的分配(尽管您可能仍然需要它)。

    function bind_validation(){
        $(".required_field ").each(function(){
            $(this).rules("add", { 
                required:true,
            });
        });
        addRemoveCloneValidation();
    }

    function addRemoveCloneValidation(){
    $('div[id^="added"]').each(function(index, item){
       var needsValidation = false;
        $.each($(item).find('.required_field'), function(index, item){                      
            if($(item).val()) 
                needsValidation = true; 
            $(item).change(addRemoveCloneValidation);
        });
        $.each($(item).find('.required_field'), function(index, item){ 
            $(item).rules("add", { 
                required:needsValidation,
            });
            if(!needsValidation)
               $(item).removeClass('errRed'); 
        });
    });   
}

添加新行时,将调用 bind_validation,然后调用 addRemoveCloneValidation。然后,根据任何输入是否具有值,添加或删除所有克隆输入的验证。

Fiddle

编辑

根据您的最新评论

2) when the user click addmore button and user click next button for the validation it should say You have missed 6 fields. Please fill before submitted because the user has not fill any of the mandatory field from the clone div

那么您还需要将“学位日期”从必填项中删除,或者在克隆时不要设置“学位日期”。

$clone.find("input.deg_date")
  .removeClass('hasDatepicker')
  .removeData('datepicker')
  .unbind()
  .datepicker({
   dateFormat: "mm-dd-yy",
   changeMonth: true,
   yearRange: "-100:+0",
   changeYear: true,
   maxDate: new Date(),
   showButtonPanel: false,
});//.val(fulldate);       <--remove

Fiddle

编辑2

要手动调用表单验证,您可以使用$(".educationForm").valid();

我已将其添加到此 Fiddle第 141 行。

较少的验证仅适用于“测试”部分。但可以很容易地添加到学校部分。

关于javascript - 使用 jquery 部分工作的克隆验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32723669/

相关文章:

javascript - Express app.use 不发送正确的假数据

javascript - 如何在 HTML 页面上提取 JSON 数据

javascript - 如何获取 ID 作为值和名称以显示在 dropdownlist php 中

javascript - 从数组中删除空对象 javascript

javascript - 我可以用 HTML5 Canvas 重现这种效果吗?

html - CSS3 变换 :translate produces inaccurate results

javascript - 加载外部数据并保持全局 javascript

javascript - 如何使用 jquery ajax 解析二级 JSON 数组

javascript - 使用 JQuery 将子节点转换为对象

javascript - JQuery Full Calendar - 初始化后编辑日历 View