jQuery解除绑定会使更新面板崩溃

问题描述

| 我有一个带有更新面板的jQuery对话框。为了使事情复杂一些,我使用jQuery validate。 为了禁用验证,我在
beforeClose
中使用jQuery unbind函数。问题是取消绑定“崩溃”更新面板。 还有其他方法可以在不“破坏”更新面板的情况下禁用验证吗? 编辑:单击对话框的按钮时,取消绑定还会启动回发。该页面完全使用ajax完成。我不想在页面中发回邮件
function mostrarVentanaVehiculo() {
    $(document).ready(function () {
        var $dialogContentVehiculo = $(\"#divDatosFacturaVehiculo\");
        var bDatosModificados = false;
        var bGuardar = false;
        var dlg = $dialogContentVehiculo.dialog({
            modal: true,title: \"Datos de vehículo\",width: \'780px\',draggable: false,resizable: false,autoOpen: false,open: function () {
                $(\'#divDatosFacturaVehiculo input[type=text],#divDatosFacturaVehiculo input[type=checkBox],#divDatosFacturaVehiculo select\').each(function (i) {
                    $(this).data(\'valor_inicial\',$(this).val());
                });

               $(\"#phContenidos_tbFechaMatriculaOrigen,#phContenidos_tbFechaMatriculaEspana,#phContenidos_tbFechaFab,#phContenidos_tbFechaCaducidad\").mask(\"99/99/99?99\");
                $(\"#phContenidos_tbDatosFacturaVehiculoTecnicosMMA,#phContenidos_tbDatosFacturaVehiculoTecnicosCilindrada,#phContenidos_tbDatosFacturaVehiculoTecnicosPotenciaReal\").mask(\"9?999,99\");
                $(\"#phContenidos_tbddlDatosFacturaVehiculoTecnicosAsientos,#phContenidos_tbDatosFacturaVehiculoTecnicosNeumaticos\").mask(\"99?99\");
            },close: function () {
                $dialogContentVehiculo.dialog(\"destroy\");
                $dialogContentVehiculo.hide();
                $(\"#phContenidos_hlVehiculoDialogo\").focus();
            },buttons: {
                \"Aceptar\": function () {
                    $(\'#divDatosFacturaVehiculo input[type=text],#divDatosFacturaVehiculo select\').each(function (i) {
                        if ($(this).val() !== $(this).data(\'valor_inicial\')) {
                            bDatosModificados = true;
                        }
                    });
                    if (bDatosModificados) {
                        jQuery.validator.messages.required = \"\";
                        jQuery.validator.messages.number = \"\";
                        jQuery.validator.messages.minlength = \"\";
                        $(\"#mainForm\").validate({
                            ignore: \":disabled\",invalidHandler: function (e,validator) {
                                var errores = validator.numberOfInvalids();
                                if (errores > 0) {
                                    $(\"divDatosFacturaVehiculo.error\").show();
                                } else {
                                    $(\"divDatosFacturaVehiculo.error\").hide();
                                }
                            },rules: {
                                ctl00$phContenidos$tbMatricula: {
                                    required: true,minlength: 4
                                },ctl00$phContenidos$tbBastidorNumero: {
                                    required: {
                                        depends: function (element) {
                                            return !$(\"#phContenidos_cbBastidor\").attr(\"checked\");
                                        }
                                    }
                                },ctl00$phContenidos$tbFechaMatriculaOrigen: {
                                    required: true
                                },ctl00$phContenidos$ddlDatosFacturaVehiculoTecnicosModelo: {
                                    required: true
                                },ctl00$phContenidos$tbDatosFacturaVehiculoTecnicosClasificacion: {
                                    required: true,ctl00$phContenidos$tbDatosFacturaVehiculoTecnicosMMA: {
                                    required: true,number: true
                                },ctl00$phContenidos$tbDatosFacturaVehiculoTecnicosCilindrada: { number: true },ctl00$phContenidos$tbDatosFacturaVehiculoTecnicosTara: { number: true },ctl00$phContenidos$tbDatosFacturaVehiculoTecnicosPotenciaReal: { number: true },ctl00$phContenidos$tbDatosFacturaOtrosDatosEjes: { number: true },ctl00$phContenidos$tbddlDatosFacturaVehiculoTecnicosAsientos: { number: true },ctl00$phContenidos$tbDatosFacturaVehiculoTecnicosNeumaticos: { number: true },ctl00$phContenidos$tbatosFacturaVehiculoTecnicosMedneumaticos: { number: true },ctl00$phContenidos$tbDatosFacturaVehiculoNKilometros: { number: true },ctl00$phContenidos$tbDatosFacturaVehiculoTecnicosCategoria: {
                                    required: true
                                }
                            },submitHandler: function (form) {
                                bGuardar = true;
                                $dialogContentVehiculo.dialog(\"close\");
                            }
                        });
                    } else {
                        bGuardar = false;
                        $dialogContentVehiculo.dialog(\"close\");
                    }
                },beforeClose: function (event,ui) {
                if (bGuardar) {
                    var bOK = checkVehiculoAdicionales();
                    if (bOK) {
                        actualizarVehiculo();
                        $(\"#phContenidos_btnActualizarTotalVehiculo\").click();
                    } else {
                        return false;
                    }
                }
                $(\"#mainForm\").unbind(\'submit\');
            }
        });
        dlg.parent().appendTo(jQuery(\"form:first\"));
        dlg.dialog(\'open\');
    });}
    

解决方法

        这里解释了jQuery名称间隔事件... 而且你可以做这样的事情
$(\"#mainForm\").bind(\"submit.something\",function(e){/*...*/});
而当您解除绑定时,您可以做
$(\"#mainForm\").unbind(\"submit.something\");