2012-06-25 33 views
8

Recibí un botón y una entrada oculta.jqueryui datepicker con entrada oculta

Quiero que el marcador de fecha se abra debajo del botón Hago clic en él. Y la fecha seleccionada se inserta en la entrada oculta.

No quiero crear un nuevo botón (usando las opciones de datepicker), y no quiero mostrar la entrada.

<button type="button" class="btn" id="date_button">Select Date...</button> 

<input type="hidden" name="date" id="date_field" /> 

<script> 
    $('#date_button').datepicker({ 
     showOn: "button", 
     onSelect: function(dateText) { 
      $('#date_field').val(dateText); 
      $('#date_button').text(dateText); 
     } 
    }) 
</script> 

¿Alguna idea?

+0

¿Puedo ver su código por ¿Plaza bursátil norteamericana? –

Respuesta

1

Esto es un poco hacky, pero parece que funciona bien:

  1. Fije el selector de fecha para la input en lugar del botón.
  2. Vuelva a colocar el marcador de fecha para que esté debajo del botón cuando se abre.
var $button = $("#date_button"), 
    left = $button.offset().left, 
    top = $button.offset().top + $button.height(); 

$('#date_field').datepicker({ 
    onSelect: function(dateText) { 
     $('#date_field').val(dateText); 
     $button.text(dateText); 
    }, 
    beforeShow: function (event, ui) { 
     setTimeout(function() { 
      ui.dpDiv.css({ left: left, top: top });  
     }, 5);    
    } 
}); 

$button.on("click", function() { 
    $("#date_field").datepicker("show"); 
}); 

Ejemplo:..http://jsfiddle.net/StUsH/

+0

parece que ya no funciona. –

+1

@ J.Ghyllebert He actualizado jsfiddle a una versión que funciona. Parece que hay un problema en jsfiddle con jQuery 1.9.1 y jQueryUI 1.9.2, el datepicker se bloquea en '$ .browser.msie'. – kibibu

+1

En lugar de usar una entrada oculta, usa una entrada de texto y escóndela con CSS. Inicializar el selector de fecha en una entrada oculta causará un error en el posicionamiento. –

12

hice esto haciendo un .show() enfocar() ocultar() - funciona perfectamente aunque es un poco sucia:

$(document).ready(function() { 
    $('input').datepicker(); 
     $('#mybutton').click(function() { 
     $('input').show().focus().hide(); 
    }); 
}); 

http://jsfiddle.net/JKLBn/

+0

No funciona en IE con las versiones más recientes de jQuery. (Probablemente porque IE establece el enfoque de forma asincrónica) –

Cuestiones relacionadas