Jquery 验证是否不适用于使用Ajax填充的对话框

Jquery 验证是否不适用于使用Ajax填充的对话框,jquery,ajax,dialog,jquery-validate,Jquery,Ajax,Dialog,Jquery Validate,我在这里和其他地方尝试了无数的建议,但没有任何效果,所以请大家了解我的代码失败的原因 Ajax调用创建的html是(选择的内容是隐藏的,但所有内容都正确关闭) 我看到您正在调用$('#addcont')。请验证(…)两次。您不能多次调用它 .validate()方法仅用于初始化表单上的插件。.validate()方法是放置选项的地方。您不能多次调用它,因此您不能通过再次调用来添加、覆盖或删除选项。随后的调用将被忽略 调用.validate()时,表单的HTML必须已经存在。在大多数情况下,它是

我在这里和其他地方尝试了无数的建议,但没有任何效果,所以请大家了解我的代码失败的原因

Ajax调用创建的html是(选择的内容是隐藏的,但所有内容都正确关闭)


我看到您正在调用
$('#addcont')。请验证(…)
两次。您不能多次调用它

  • .validate()
    方法仅用于初始化表单上的插件。
    .validate()
    方法是放置选项的地方。您不能多次调用它,因此您不能通过再次调用来添加、覆盖或删除选项。随后的调用将被忽略

  • 调用
    .validate()
    时,表单的HTML必须已经存在。在大多数情况下,它是在DOM就绪事件处理程序中调用的。在动态创建表单的情况下,会在创建表单的HTML后立即调用它

否则,我将依赖您构造一个JSFIDLE来重现问题,以便我们能够检查和排除故障

  • 触发ajax以在对话框中创建表单

  • 完全构建HTML后,调用
    .validate()
    方法和选项

  • 再次查看代码时,需要完全删除
    按钮:
    选项中的
    .validate()
    方法。由于validate插件会自动捕获submit按钮,因此不需要做任何特殊的操作


    只需将已删除的
    .validate()
    中的验证规则和选项复制到末尾的
    .validate()
    方法中。

    关于动态创建表单以及使用parent()和appendTo()在DOM中移动对话框,有很多建议但最后我回到了,并决定将验证声明和触发保留在对话框按钮中,但以编程方式进行

    我使用要检查的表单id设置了一个变量,然后使用if语句在验证成功时发送表单。无论它存在于DOM中的任何地方,这都会以某种方式起作用,所以一只快乐的兔子。至少我能理解发生了什么事

    $(document).ready(function(){
    $(document).on('click','a.addcontr', function (e) {
        e.preventDefault();
        var organid=$('#basinf').attr("parn");
        var usrd =  $('#basinf').attr("pare");
        var dbextn = $('#basinf').attr("dbextn");
        var parf =  $('#basinf').attr("parf");
        var $tag = $("<div id='adc'><img src='images/loading.gif'></div>");
        $.post("ajax/createContractor.php",
        {organid: organid, dbextn: dbextn, parf: parf},
        function(data) {
            $tag.html(data).dialog({
                autoOpen: false, title: "Adding a contractor",
                width: 540,
                modal: true,
                buttons: {
                    "Add Contractor" : function() {  
                        var validator=$('#addcont').validate({
                            rules:{
                                full_name: "required",
                                locat_name: "required",
                                address1:"required",
                                town:"required",
                                postcode:"required"
                            },
                            messages: {
                                full_name: " Enter name of organisation",
                                locat_name: " Enter location name",
                                address1: " Enter address",
                                town: " Enter town or city",
                            postcode: " Enter postcode"}
                        });
                        if(validator.form()){$.post("ajax/insContractor.php",$('#addcont').serialize(),function(data){ 
                            $( '#adc' ).dialog( "close" );
                        });}
    
                    },
                    "Cancel": function() {
                        $( this ).dialog( "close" );
                    }
                },
                close: function() {$('#addcont').remove();
                    $('#adc').remove();
                },
            }).dialog('open');  
    
        });
    });
    
    $(文档).ready(函数(){
    $(文档).on('click','a.addcontr',函数(e){
    e、 预防默认值();
    var organid=$('#basinf').attr(“parn”);
    var usrd=$('#basinf').attr(“pare”);
    var dbextn=$('#basinf').attr(“dbextn”);
    var parf=$('#basinf').attr(“parf”);
    var$tag=$(“”);
    $.post(“ajax/createContractor.php”,
    {organid:organid,dbextn:dbextn,parf:parf},
    功能(数据){
    $tag.html(数据).dialog({
    自动打开:false,标题:“添加承包商”,
    宽度:540,
    莫代尔:是的,
    按钮:{
    “添加承包商”:函数(){
    var验证程序=$('#addcont')。验证({
    规则:{
    全名:“必选”,
    locat_名称:“必需”,
    地址1:“必需”,
    城镇:“必选”,
    邮政编码:“必填”
    },
    信息:{
    全名:“输入组织名称”,
    地点名称:“输入地点名称”,
    地址1:“输入地址”,
    城镇:“进入城镇或城市”,
    邮政编码:“输入邮政编码”}
    });
    if(validator.form()){$.post(“ajax/insContractor.php”),$('#addcont').serialize(),函数(数据){
    $('#adc')。对话框(“关闭”);
    });}
    },
    “取消”:函数(){
    $(此).dialog(“关闭”);
    }
    },
    关闭:函数(){$('#addcont').remove();
    $('#adc')。删除();
    },
    }).对话框(“打开”);
    });
    });
    

    }))

    创建一个JSFIDLE,否则,我认为不会有太多人愿意深入研究如此复杂的问题。我确实尝试过按照您的建议移动它,但这是一条死胡同,我确实考虑过构建一个JSFIDLE,创建了一个帐户等,但作为一个新手,它发现它完全太混乱,无法复制对话框的ajax交付,然后进行验证。所以我继续打猎和尝试,日子一天天过去。。。。
    $(document).ready(function(){
    $('.nextbut').hide();
    $(document).on('click','a.addcontr', function (e) {
        e.preventDefault();
        var organid=$('#basinf').attr("parn");
        var usrd =  $('#basinf').attr("pare");
        var dbextn = $('#basinf').attr("dbextn");
        var parf =  $('#basinf').attr("parf");
        var $tag = $("<div id='adc'><img src='images/loading.gif'></div>");
        $.post("ajax/createContractor.php",
        {organid: organid, dbextn: dbextn, parf: parf},
        function(data) {
            $tag.html(data).dialog({autoOpen: false, title: "Adding a contractor",
                width: 540,
                modal: true,
                buttons: {
                    "Add Contractor" : function() { $('#addcont').validate({debug: true ,
                        rules:{
                            full_name: "required",
                            locat_name: "required",
                            address1:"required",
                            town:"required",
                            postcode:"required"
                        },
                        messages: {
                            full_name: " Enter name of organisation",
                            locat_name: " Enter location name",
                            address1: " Enter address",
                            town: " Enter town or city",
                        postcode: " Enter postcode"}, 
                        submitHandler:function(){$.post("ajax/insContractor.php",$('#addcont').serialize(),function(data){ 
                            $( '#adc' ).dialog( "close" );});}
                    });
    
                    },
                    "Cancel": function() {
                        $( this ).dialog( "close" );
                    }
                },
                close: function() {$('#addcont').remove();
                    $('#adc').remove();
                }}).dialog('open'); 
    
        });$('#addcont').validate();
    });
    });
    
    function(event, ui){$('#addcont').validate();}, just after modal: true,
    
    $(document).ready(function(){
    $(document).on('click','a.addcontr', function (e) {
        e.preventDefault();
        var organid=$('#basinf').attr("parn");
        var usrd =  $('#basinf').attr("pare");
        var dbextn = $('#basinf').attr("dbextn");
        var parf =  $('#basinf').attr("parf");
        var $tag = $("<div id='adc'><img src='images/loading.gif'></div>");
        $.post("ajax/createContractor.php",
        {organid: organid, dbextn: dbextn, parf: parf},
        function(data) {
            $tag.html(data).dialog({
                autoOpen: false, title: "Adding a contractor",
                width: 540,
                modal: true,
                buttons: {
                    "Add Contractor" : function() {  
                        var validator=$('#addcont').validate({
                            rules:{
                                full_name: "required",
                                locat_name: "required",
                                address1:"required",
                                town:"required",
                                postcode:"required"
                            },
                            messages: {
                                full_name: " Enter name of organisation",
                                locat_name: " Enter location name",
                                address1: " Enter address",
                                town: " Enter town or city",
                            postcode: " Enter postcode"}
                        });
                        if(validator.form()){$.post("ajax/insContractor.php",$('#addcont').serialize(),function(data){ 
                            $( '#adc' ).dialog( "close" );
                        });}
    
                    },
                    "Cancel": function() {
                        $( this ).dialog( "close" );
                    }
                },
                close: function() {$('#addcont').remove();
                    $('#adc').remove();
                },
            }).dialog('open');  
    
        });
    });