2011-05-31 87 views
0

我有一个jQuery对话框,里面有更新面板。为了让事情更复杂一点,我使用jQuery验证。jQuery解除绑定更新面板

为了禁用验证,我在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 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'); 
    });} 
+0

解除绑定导致所有的点击事件被解除绑定... – Rafay 2011-05-31 11:12:22

+0

尝试命名空间事件... – Rafay 2011-05-31 11:26:54

+0

@ 3nigma你能举个例子吗?谢谢 – ch3r1f 2011-05-31 11:30:48

回答

1

HERE jQuery的名称间隔事件的解释...

而且你可以做这样的事情

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

和wher你解除绑定,你可以做

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