当前位置:  开发笔记 > 编程语言 > 正文

如何更改jQuery DatePicker控件的弹出位置

如何解决《如何更改jQueryDatePicker控件的弹出位置》经验,为你挑选了7个好方法。

知道如何让DatePicker出现在相关文本框的末尾而不是直接在它下面吗?容易发生的是文本框朝向页面底部,DatePicker向上移动以占用它并完全覆盖文本框.如果用户想要输入日期而不是选择日期,则他们不能.我宁愿让它出现在文本框之后,所以它如何垂直调整并不重要.

知道如何控制定位吗?我没有看到小部件的任何设置,我没有运气调整CSS设置,但我很容易丢失一些东西.



1> 小智..:

这是我正在使用的:

$('input.date').datepicker({
    beforeShow: function(input, inst)
    {
        inst.dpDiv.css({marginTop: -input.offsetHeight + 'px', marginLeft: input.offsetWidth + 'px'});
    }
});

您可能还想向左边距添加更多内容,因此它不会对输入字段.


好技巧.问题是,如果将日期选择器显示在屏幕边框之外,_showDatepicker将尝试重新定位它,因此,top和left将不同,marginTop,marginLeft可能需要调整.

2> Christian Le..:

我直接在CSS中做到这一点:

.ui-datepicker { 
  margin-left: 100px;
  z-index: 1000;
}

我的日期输入字段都是100px宽.我还添加了z-index,因此日历也出现在AJAX弹出窗口之上.

我不修改jquery-ui CSS文件; 我在主CSS文件中重载了类,所以我可以更改主题或更新小部件而无需重新输入我的特定mod.



3> Rost..:

这是我的Datepicker日历对齐的变体.

我认为它非常好,因为你可以通过jQuery UI Position util来控制定位.

一个限制:需要jquery.ui.position.js.

码:

$('input[name=date]').datepicker({
    beforeShow: function(input, inst) {
        // Handle calendar position before showing it.
        // It's not supported by Datepicker itself (for now) so we need to use its internal variables.
        var calendar = inst.dpDiv;

        // Dirty hack, but we can't do anything without it (for now, in jQuery UI 1.8.20)
        setTimeout(function() {
            calendar.position({
                my: 'right top',
                at: 'right bottom',
                collision: 'none',
                of: input
            });
        }, 1);
    }
})



4> Patrick..:

这是另一个适合我的变体,调整rect.top + 40,rect.left + 0以满足您的需求:

$(".datepicker").datepicker({
    changeMonth: true,
    changeYear: true,
    dateFormat: 'mm/dd/yy',
    beforeShow: function (input, inst) {
        var rect = input.getBoundingClientRect();
        setTimeout(function () {
	        inst.dpDiv.css({ top: rect.top + 40, left: rect.left + 0 });
        }, 0);
    }
});





5> jonmc12..:

这个问题的接受答案实际上不适用于jQuery UI Datepicker.要更改jQuery UI Datepicker的位置,只需在css文件中修改.ui-datepicker即可.Datepicker的大小也可以通过这种方式更改,只需调整字体大小即可.


我不知道为什么这是接受的答案,因为它几乎完全没用.
给定的答案*完全没用,因为datepicker会在弹出窗口小部件之前动态修改.ui-datepicker的css.
你能告诉我你做了哪些改变吗?
这个答案没有提供任何细节,也不应该是公认的答案.

6> David Laberg..:

这对我有用:

 beforeShow: function(input, inst) {
     var cal = inst.dpDiv;
     var top  = $(this).offset().top + $(this).outerHeight();
     var left = $(this).offset().left;
     setTimeout(function() {
        cal.css({
            'top' : top,
            'left': left
        });
     }, 10);



7> monzonj..:

首先我认为afterShowing在datepicker对象中应该有一个方法,你可以在jquery在_showDatepicker方法中完成所有voodoo之后改变位置.此外,调用的参数preferedPosition也是可取的,因此您可以设置它,并且jquery会修改它,以防对话框在视口外部呈现.

最后这件事有一个"诀窍".如果您研究该_showDatepicker方法,您将看到使用私有变量$.datepikcer._pos.如果之前没有人设置过,那么该变量将被设置.如果在显示对话框之前修改该变量,Jquery将接受它并将尝试在该位置分配对话框,如果它呈现在屏幕外,它将调整它以确保它是可见的.听起来不错,嗯?

问题是; _pos是私人的,但如果你不介意的话.您可以:

$('input.date').datepicker({
    beforeShow: function(input, inst)
    {
        $.datepicker._pos = $.datepicker._findPos(input); //this is the default position
        $.datepicker._pos[0] = whatever; //left
        $.datepicker._pos[1] = whatever; //top
    }
});

但要小心Jquery-ui更新,因为内部实现的更改_showDatepicker可能会破坏您的代码.

推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有