2011-05-24 43 views
30

Deseo eliminar la función datepicker según el valor seleccionado en la lista desplegable. Intento los siguientes códigos, pero todavía muestra el calendario cuando coloco el cursor en el cuadro de texto. Por favor dame una sugerenciaEliminar la función Datepicker dinámicamente

$("#ddlSearchType").change(function() { 
    if ($(this).val() == "Required Date" || $(this).val() == "Submitted Date") { 
     $("#txtSearch").datepicker(); 
    } else { 
     $("#txtSearch").datepicker("option", "disabled", true); 
    } 
}); 

enter image description here

+0

"fecha requerida" y "Fecha de presentación" no son los valores de la lista desplegable, que son etiquetas. Busque y el valor que necesita estará en el atributo 'value' del menú desplegable. –

+0

¿por qué no cargarlo en el documento listo (selector de fecha), que alternar ocultar/mostrar dependiendo de sus opciones de selección? – ant

+0

Utilicé "Fecha requerida" y "Fecha de envío" como valores. Sí, podría cambiarlos a valores 0,1,2,3 más tarde. Gracias por tu sugerencia. – TTCG

Respuesta

71

Usted puede probar los métodos de activar/desactivar en lugar de utilizar el método de opción:

$("#txtSearch").datepicker("enable"); 
$("#txtSearch").datepicker("disable"); 

Esto desactiva todo el cuadro de texto. Así que puede ser que usted puede utilizar en lugar datepicker.destroy():

$(document).ready(function() { 
    $("#ddlSearchType").change(function() { 
     if ($(this).val() == "Required Date" || $(this).val() == "Submitted Date") { 
      $("#txtSearch").datepicker(); 
     } 
     else { 
      $("#txtSearch").datepicker("destroy"); 
     } 
    }).change(); 
}); 

Demo here.

5

Sólo se unen el selector de fechas a una clase en lugar de unirlo al ello. Retire la clase cuando se quiere revocar el selector de fechas ...

$("#ddlSearchType").change(function() { 
    if ($(this).val() == "Required Date" || $(this).val() == "Submitted Date")     { 
    $("#txtSearch").addClass("mydate"); 
    $(".mydate").datepicker() 
    } else { 
    $("#txtSearch").removeClass("mydate"); 
    } 
}); 
+0

Si esto funcionó antes, actualmente no está funcionando ahora –

21

Destruye la instancia del datepicker cuando no la quieras y crea una nueva instancia siempre que sea necesario.

Sé que esto es feo, pero sólo esto parece estar funcionando ...

Check this out

$("#ddlSearchType").change(function() { 
     if ($(this).val() == "Required Date" || $(this).val() == "Submitted Date") { 
       $("#txtSearch").datepicker(); 

     } 
      else { 
       $("#txtSearch").datepicker("destroy");      
     } 
}); 
0

Esta es la solución que yo uso. Tiene más líneas pero solo creará el datepicker una vez.

$('#txtSearch').datepicker({ 
    constrainInput:false, 
    beforeShow: function(){ 
     var t = $('#ddlSearchType').val(); 
     if(['Required Date', 'Submitted Date'].indexOf(t)) { 
      $('#txtSearch').prop('readonly', false); 
      return false; 
     } 
     else $('#txtSearch').prop('readonly', true); 
    } 
}); 

El selector de fechas no se mostrará a menos que el valor de ddlSearchType es "fecha requerida" o "Fecha de presentación"

0

Bueno, yo tenía el mismo problema y trataron de "destruir", pero que no funcionó para mí. Entonces me encontré siguiente trabajo alrededor Mi HTML fue:

<input placeholder="Select Date" id="MyControlId" class="form-control datepicker" type="text" /> 

Jquery que funcionan para mí:

$('#MyControlId').data('datepicker').remove(); 
Cuestiones relacionadas