2011-05-31 55 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");