faire en sorte que le datepicker de jQuery UI s'ouvre toujours dans une certaine direction?
j'utilise le contrôle de jQuery UI dans un position: fixed
barre d'outils au bas de ma page. De temps en temps, sur les ordinateurs aléatoires, le curseur de données apparaît sous la barre d'outils, ce qui signifie qu'il est hors de la page et impossible de voir ou d'interagir avec.
Est-il un moyen pour forcer le positionnement du contrôle datepicker pour toujours être au-dessus et à la droite de son <input>
?
6 réponses
vous pouvez changer les lignes:
offset.left -= (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ? Math.abs(offset.left + dpWidth - viewWidth) : 0;
offset.top -= (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ? Math.abs(offset.top + dpHeight + inputHeight*2 - viewHeight) : 0;
...à lire:
offset.left = $(inst.input).position().left + dpWidth;
offset.top = $(inst.input).position().top - dpHeight;
cela perd cependant de la flexibilité. Si votre entrée se trouve au haut de la page, vous aurez le problème inverse d'avant.
la seule façon d'être certain (pour la version jQueryUI de datepicker) est de désactiver la fonctionnalité du datepicker qui essaie de rendre à l'intérieur du viewport. Voici un moyen de le faire sans modifier les fichiers de code source:
$.extend(window.DP_jQuery.datepicker,{_checkOffset:function(inst,offset,isFixed){return offset}});
sur les versions ultérieures de jQuery UI try:
$.extend($.datepicker,{_checkOffset:function(inst,offset,isFixed){return offset}});
qui ne fait qu'atomiser la fonction _checkOffset à l'intérieur du curseur de données qui la rend étrange. Ensuite, vous pouvez utiliser le .ui-datepicker css pour s'assurer qu'elle reste fixe si c'est ce que vous êtes après. Plus d'infos sur comment le contrôle de positionnement de jqueryui-datepicker.
Problème, c'est que l'élément en position: fixed, montrer la position 0px (vérifier avec: alerte$('#datepicker2').position.))(
Solution:
$('#datepicker').datepicker( {beforeShow: function(input) {
var x = 100; //add offset
var y = 20;
field = $(input);
left = field.position().left + x;
bottom = y;
setTimeout(function(){
$('#ui-datepicker-div').css({'top':'', 'bottom':bottom + 'px', 'left': left + 'px'});
},1);
}}
Test HTML:
<form style="position:fixed; bottom:0; width:100%" name="form1" method="post" action="">
<label>
<input style="left:300px; position:absolute; bottom:0" type="text" name="textfield" id="datepicker">
</label>
</form>
http://www.mindfiresolutions.com/Make-jQuery-datepicker-to-popup-in-different-positions-995.php
cochez cette. J'ai utilisé ceci et j'ai été capable de positionner le contrôle du curseur de données dans tous les navigateurs.
j'ai eu un problème similaire. J'ai une page avec des cueilleurs de date potentiellement utilisés à divers placés sur la page mais aussi sur un en-tête fixe où l'utilisateur peut faire défiler la page à la fois horizontalement et verticalement avec l'en-tête fixe restant en place. L'en-tête a aussi un cliqueur de données. Donc je ne peux pas faire un changement global de datepicker.
C'est ce que j'ai fait. C'est certes un kluge, mais ça marche, alors j'ai pensé que ça pourrait aider quelqu'un d'autre. Avec un peu de chance, le jquery datepicker va ajouter une option position.
beforeShow: function(input, inst) {
$("#ui-datepicker-div").css({ "visibility": "hidden", "display": "none" );
window.setTimeout(function() {
var leftPosition = parseInt($(window).width() / 2);
$("#ui-datepicker-div").css({ "position": "fixed", "top": 0, "left": leftPosition });
$("#ui-datepicker-div").css({ "visibility": "visible", "display": "inherit" );
}, 500);
}
à Partir de la documentation, il semble que vous pourriez être en mesure d'utiliser le 'dialogue' méthode du plugin de cliqueur de données pour atteindre le résultat désiré. Cependant, l'utilisation de ce moyen très probable signifie que vous devrez mettre en œuvre une partie de la colle que vous obtiendriez autrement hors-de-la-boîte avec le curseur de données, tel qu'un gestionnaire de rappel pour extraire la date, etc.
j'ai essayé de faire une maquette d'un code pour le voir en action et à moins d'avoir le curseur de données à afficher, Je n'ai pas pu tout à fait obtenir ce travail, cependant. Bref, je voulais te le dire au cas où tu aurais plus de chance que moi.