jQuery验证引擎 - 如何安全地重新验证输入中已更改的类属性的表单?

时间:2014-05-12 18:25:03

标签: jquery jquery-validation-engine

我正在使用验证引擎进行一些测试,我发现消息呈现错误(在页面的角落),所以......当您动态更改类属性时,是否可以正确呈现消息jQuery的?喜欢重新验证表格? (输入的类属性已更改)

更新:我尝试使用'validate'操作,但这是一回事。我在这里使用3个表,每个表有4个复选框。因此,在下拉列表更改时,我切换表格(选择一个选项时,会显示一个表格(从输入中删除disableddisplay:none),另外两个表格(将disabled添加到输入中)将display:none放到表中。复选框名称使用Thymeleaf预处理表达式进行渲染,所以我想也许就是这样。我创建了一个使用alt属性而不是名称的minCheckbox的替代版本,但无济于事。好吧,但是错误仍然存​​在。制作表格的行为和消失是问题,但我不知道如何修复它。

更新#2:好的,我首先点击了保存按钮的点击事件:

    $('input[name="input_save"]').click(function() {
        if(flag == false){
             $("#frmUsuarioCrear").validationEngine();
             flag = true;
         }

        if(flag2 == true)
        {
            $("#frmUsuarioCrear").validationEngine('attach');
            flag2 = false;
        }
    });

    $("#frmUsuarioCrear").bind("jqv.form.result", function(event, errorFound) {
            if(errorFound)
                alert("Hay algunos problemas con sus datos. Revise y vuelva a intentar.");
    });

我还为表单添加了绑定。该标志仅用于在分离时重新激活引擎。因此,在下拉列表的更改事件中:

    $('#ddlModulo').change(function(){
        var val = this.value;

        if(val == "ADQUIRIENTE")
        {
            $('#modulo_1').find("input").removeAttr("disabled");
            $('#modulo_2').find("input").attr("disabled", "disabled");
            $('#modulo_3').find("input").attr("disabled", "disabled");
            $('#modulo_1').removeAttr("style");    
            $('#modulo_2').css("display", "none");
            $('#modulo_3').css("display", "none");
            $("#main tr:nth-child(6)").hide();
            $("#main tr:nth-child(6)").find("select").attr("disabled", "disabled");

            $("#main tr:nth-child(7)").hide();
            $("#main tr:nth-child(7)").find("select").attr("disabled", "disabled");

            $('#modulo_1').find("input:first").attr("class", "validate[funcCall[checkHooks]]");
            $('#modulo_2').find("input:first").removeAttr("class");
            $('#modulo_3').find("input:first").removeAttr("class");
        }
        else if(val == "COMERCIO")
        {
            $('#modulo_1').find("input").attr("disabled", "disabled");
            $('#modulo_2').find("input").removeAttr("disabled");
            $('#modulo_3').find("input").attr("disabled", "disabled");
            $('#modulo_1').css("display", "none");
            $('#modulo_2').removeAttr("style");    
            $('#modulo_3').css("display", "none");

            $("#main tr:nth-child(6)").show();
            $("#main tr:nth-child(6)").find("select").removeAttr("disabled");

            $("#main tr:nth-child(7)").hide();
            $("#main tr:nth-child(7)").find("select").attr("disabled", "disabled");

            $('#modulo_1').find("input:first").removeAttr("class");
            $('#modulo_2').find("input:first").attr("class", "validate[funcCall[checkHooks]]");
            $('#modulo_3').find("input:first").removeAttr("class");
        }
        else if(val == "EMISOR")
        {
            $('#modulo_1').find("input").attr("disabled", "disabled");
            $('#modulo_2').find("input").attr("disabled", "disabled");
            $('#modulo_3').find("input").removeAttr("disabled");
            $('#modulo_1').css("display", "none");
            $('#modulo_2').css("display", "none");  
            $('#modulo_3').removeAttr("style");     

            $("#main tr:nth-child(6)").hide();
            $("#main tr:nth-child(6)").find("select").attr("disabled", "disabled"); 

            $("#main tr:nth-child(7)").show();
            $("#main tr:nth-child(7)").find("select").removeAttr("disabled");

            $('#modulo_1').find("input:first").removeAttr("class");
            $('#modulo_2').find("input:first").removeAttr("class");
            $('#modulo_3').find("input:first").attr("class", "validate[funcCall[checkHooks]]");
        }
        else
        {
            $('#modulo_1').find("input").attr("disabled", "disabled");
            $('#modulo_2').find("input").attr("disabled", "disabled");
            $('#modulo_3').find("input").attr("disabled", "disabled");
            $('#modulo_1').css("display", "none");
            $('#modulo_2').css("display", "none");
            $('#modulo_3').css("display", "none");

            $("#main tr:nth-child(6)").hide();
            $("#main tr:nth-child(6)").find("select").attr("disabled", "disabled"); 

            $("#main tr:nth-child(7)").hide();
            $("#main tr:nth-child(7)").find("select").attr("disabled", "disabled"); 

            $('#modulo_1').find("input:first").removeAttr("class");
            $('#modulo_2').find("input:first").removeAttr("class");
            $('#modulo_3').find("input:first").removeAttr("class");
        }

        if(flag == true){
            $("#frmUsuarioCrear").validationEngine('detach');
            flag2 = true;
        }            

    });

我这样做但是提示没有呈现它应该的位置。顺便说一句,在选择下拉列表的选项时,我在右表的每个第一个输入上添加了验证类。这可确保提示仅显示在第一个复选框中。 (我正在使用一个函数,因为所选选项的更改事件从其对应的表中获取所有复选框,并查看是否有一些已选中,如果没有则返回警报。换句话说,验证引擎的funcCall。

function checkHooks(field, rules, i, options)
{

    var val = $('#ddlModulo').val();

        if(val == "ADQUIRIENTE")
        {
            var inputs =  $('#modulo_1').find("input[type='checkbox']:checked");

            if(inputs.length == 0){
                return options.allrules.checkHooks.alertText;
            }
        }
        else if(val == "COMERCIO")
        {
            var inputs =  $('#modulo_2').find("input[type='checkbox']:checked");

            if(inputs.length == 0){
                return options.allrules.checkHooks.alertText;
            }
        }
        else if(val == "EMISOR")
        {
            var inputs =  $('#modulo_3').find("input[type='checkbox']:checked");

            if(inputs.length == 0){
                return options.allrules.checkHooks.alertText;
            }
        }        

更新#3:我稍微修改了这段代码。我在提交点击事件中添加了第二个条件,它检查第二个标志。如果是真的,它将附加验证引擎。这将是错误的。在下拉列表更改事件中,我根据第一个标志设置了类似的条件,只是它在更改时分离引擎并将第二个标志变为true(因此它将在提交时输入条件,并重新连接引擎)< / p>

1 个答案:

答案 0 :(得分:0)

你有没有尝试过:

$("#Form-ID").validationEngine('validate');