2013-01-24 55 views
1

我在我的页面上使用了几个日期选择器,并且在某些情况下我用其中一个隐藏了一个div。之后,其他日期选择器的位置不再正确,它们位于输入之上。我认为这是因为这个地方是在初始化时确定的,因为如果我再次显示div,那么位置是正确的。jquery datepicker动态地改变位置

但是如何让其位置发生变化,如果其他datepicker(div)隐藏?

+0

你可以使用的CSS(“知名度”,“隐藏”)而不是.hide()使用'display','none' –

回答

3

也许设定在beforeShow事件中的位置:

$(".is-datepicker").datepicker("option", "beforeShow", function(input, inst){ 
    $(inst.dpDiv).position({ 
     my: "left top", 
     at: "left bottom", 
     of: $(input) 
}); 

position()在版本1.8 http://api.jqueryui.com/position/

jsfiddle

+0

不,不起作用。在Firefox中,我现在发现没有问题。所以它只是IE ... –

+0

你没有尝试用没有用有效的选择器替换'.is-datepicker'吗? – Malk

+0

我做了,发生了什么是我的输入下移和日期选择器stil比输入 –

0

添加另一个答案被添加,因为,因为我接受的答案并没有为我工作我正在使用1.7,也许别人会觉得这很有用。

可以通过使用_checkOffset方法来改变需要

$.datepicker._checkOffset_original = $.datepicker._checkOffset; 
$.datepicker._checkOffset = function(inst, offset, isFixed) { 
    var offset = $.datepicker._checkOffset_original(inst, offset, isFixed); 
    var alterOffset = this._get(inst, 'alterOffset'); 
    if (alterOffset) 
     return alterOffset.apply((inst.input ? inst.input[0] : null), [offset]); // trigger custom callback 
     return offset; 
    } 

和想要的回调

在日期选择器设置完成
$('#id').datepicker('option', 'alterOffset', function(offset){ 
    //change offset here 
    return offset; 
});