问题描述
|
我有一个带有更新面板的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\");