2012-06-25 17 views
8

Ho ricevuto un pulsante e un input nascosto.jqueryui datepicker con input nascosto

Desidero che il datario si apra sotto il pulsante. Lo clicco. E la data selezionata viene inserita nell'input nascosto.

Non voglio creare un nuovo pulsante (utilizzando le opzioni datepicker), e non voglio mostrare l'input.

<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> 

Qualche idea?

+0

Posso vedere il codice? ase? –

risposta

1

Questo è un po 'hacky, ma sembra funzionare bene:

  1. Fissare il DatePicker alla input al posto del pulsante.
  2. Riposizionare il datepicker sotto il pulsante quando si apre.
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"); 
}); 

Esempio:..http://jsfiddle.net/StUsH/

+0

non sembra funzionare più. –

+1

@ J.Ghyllebert Ho aggiornato il jsfiddle a una versione che funziona. Sembra che ci sia un problema in jsfiddle con jQuery 1.9.1 e jQueryUI 1.9.2, il blocco datepicker su '$ .browser.msie'. – kibibu

+1

Invece di usare un input nascosto, usa un input di testo e nascondilo con i CSS. L'inizializzazione di DatePicker su un input nascosto causerà un errore sul posizionamento. –

12

Ho fatto questo facendo un .Show() messa a fuoco() nascondere() - funziona perfettamente anche se è un po 'sporca:

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

http://jsfiddle.net/JKLBn/

+0

Non funziona in IE con le versioni jQuery più recenti. (Probabilmente perché IE si focalizza in modo asincrono) –

Problemi correlati