jQuery 取消绑定使更新面板崩溃

发布于 2024-11-10 11:54:08 字数 6707 浏览 0 评论 0原文

我有一个 jQuery 对话框,里面有更新面板。为了使事情变得更复杂一些,我使用 jQuery 验证。

为了禁用验证,我在 beforeClose 中使用 jQuery 取消绑定函数。问题是取消绑定会使更新面板“崩溃”。

是否有其他方法可以禁用验证而不“崩溃”更新面板?

编辑:当单击对话框的按钮时,取消绑定也会启动回发。页面完全是用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 input[type=checkbox],#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,
                                    minlength: 4
                                },
                                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$tbDatosFacturaVehiculoTecnicosClasificacion: {
                                    required: true,
                                    minlength: 4
                                },
                                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');
    });}

I have a jQuery dialog with update panels inside it. To make things a little more complex, I use jQuery validate.

In order to disable the validation, I use jQuery unbind function in beforeClose. The problem is that unbind "crashes" the update panels.

Is there other way to disable the validation without "crashing" the update panels?

Edit: Unbind also launches postbacks when dialog's button are clicked. The page is completely done with ajax. I don't want a postback in my page.

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 input[type=checkbox],#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,
                                    minlength: 4
                                },
                                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$tbDatosFacturaVehiculoTecnicosClasificacion: {
                                    required: true,
                                    minlength: 4
                                },
                                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');
    });}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

还给你自由 2024-11-17 11:54:09

此处解释了jquery名称间隔事件...

此外,您可以做一些事情像这样

$("#mainForm").bind("submit.something", function(e){/*...*/});

,当你解除绑定时你可以做

$("#mainForm").unbind("submit.something");

HERE the jquery name spaced events are explained...

moreover you can do something like this

$("#mainForm").bind("submit.something", function(e){/*...*/});

and wher you are unbinding you can do

$("#mainForm").unbind("submit.something");
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文