2012-06-25 2 views
8

je me suis un bouton et une entrée cachée.datepicker jQueryUI avec entrée cachée

Je veux que le datepicker ouvre sous le bouton je clique dessus. Et la date sélectionnée est insérée dans l'entrée cachée.

Je ne veux pas créer un nouveau bouton (en utilisant les options de datepicker), et je ne veux pas montrer l'entrée.

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

Des idées?

+0

Puis-je voir votre code ple ase? –

Répondre

1

C'est un peu hacky, mais il semble fonctionner bien:

  1. Fixez le datepicker au input au lieu du bouton.
  2. Repositionner le datepicker être sous le bouton quand il ouvre.
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"); 
}); 

Exemple:..http://jsfiddle.net/StUsH/

+0

ça ne semble plus fonctionner. –

+1

@ J.Ghyllebert J'ai mis à jour le jsFiddle à une version qui fonctionne. Il semble y avoir un problème dans jsFiddle avec jQuery 1.9.1 et 1.9.2 jQueryUI, le datepicker s'étrangle '.browser.msie' $. – kibibu

+1

Au lieu d'utiliser une entrée masquée, utilisez une entrée de texte et masquez-la avec CSS. L'initialisation de l'outil datepicker sur une entrée masquée provoquera une erreur de positionnement. –

12

Je l'ai fait en faisant une .show() mise au point() cacher() - fonctionne parfaitement bien qu'il est un peu sale:

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

http://jsfiddle.net/JKLBn/

+0

Ne fonctionne pas dans IE avec les versions récentes de jQuery. (Probablement parce que les ensembles IE se concentrent de manière asynchrone) –