2009-10-06 129 views
15

我在頁面底部的position: fixed工具欄中使用jQuery UI的datepicker控件。偶爾,在隨機電腦上,日期選擇器出現在工具欄下方,這意味着它離開頁面並且不可能查看或與之交互。讓jQuery UI的datepicker總是在某個方向打開?

有沒有辦法強制datepicker控件的位置始終位於其<input>的右上方?

+0

Firebug中沒有錯誤。 – ceejayoz 2009-10-27 18:45:31

+0

你能更好地修正錯誤的隨機性嗎?某些版本的Firebug弄亂了頁面高度偏移元素,理論上可能會對結果負責。或者我們正在談論Internet Explorer? – Frankie 2009-11-02 16:56:42

+0

適用於IE,Safari和Firefox。 – ceejayoz 2009-11-02 19:08:52

回答

6

你可以改變線路:

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; 

...閱讀:

offset.left = $(inst.input).position().left + dpWidth; 
offset.top = $(inst.input).position().top - dpHeight; 

這失去彈性,雖然。如果您的輸入恰好位於頁面的頂部,您將遇到與之前相反的問題。

+0

謝謝。日期選擇器絕對不在頁面的頂部,這是一個非常有限的系統,所以我可以合理確定地說它會保持這種狀態。將嘗試這一點,但如果任何人有一個解決方案,不需要編輯核心jQuery UI代碼,這將是很好的。 – ceejayoz 2009-10-27 18:47:44

+0

沒有問題。我希望那裏*是一個更好的解決方案... – Kev 2009-10-27 19:08:08

+6

有一種方法可以在不編輯核心源文件的情況下完成,請參閱下面的答案。國際海事組織應該有一個選項來禁用自動定位功能。 – Purrell 2009-11-30 22:46:30

0

從文檔看來,您可能可以使用datepicker插件的'dialog' method來實現預期的結果。然而,使用這個最有可能意味着你將不得不實現一些你會用datepicker獲得開箱即用的粘合劑,例如提取日期的回調處理程序等。

我試過了去模擬一些代碼來看看它是否在行動中,並且沒有讓日期選擇器顯示出來,但是我無法完成它的工作。無論如何,如果你比我有更好的運氣,我想指出你的意見。

10

問題是該元素的位置:固定顯示頂部位置0px(檢查:alert $('#datepicker2')。position())。

解決方案:

$('#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);      
}} 

測試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> 
+1

我知道這是一個較舊的帖子,但它是唯一對所有發佈的解決方案都適用的解決方案。 jmav,謝謝。 – Travis 2010-07-27 20:33:51

19

只有這樣,才能肯定(對日期選擇器的jQueryUI的版本)是禁用,試圖使裏面的日期選擇器的功能視口。這裏有一個辦法做到這一點無需修改源代碼文件:

$.extend(window.DP_jQuery.datepicker,{_checkOffset:function(inst,offset,isFixed){return offset}}); 

介紹jQuery UI嘗試更高版本:

$.extend($.datepicker,{_checkOffset:function(inst,offset,isFixed){return offset}}); 

這只是核彈內的日期選擇器功能_checkOffset,使得它瘋狂的。然後,您可以使用.ui-datepicker css來確保它保持固定,如果這就是你所追求的。更多信息在how-to-control-positioning-of-jqueryui-datepicker

+0

請試試看,謝謝! – ceejayoz 2009-11-30 22:58:17

+0

非常感謝。多麼痛苦! – 2010-06-17 23:30:57

+0

@Purell你是明星!一直在尋找這個年齡段,嘗試了很多不同的方法,這是迄今爲止唯一最穩固的解決方案。謝謝堆。 – Philzen 2016-08-10 09:40:08

1

我有類似的問題。我有一個包含日期選擇器的頁面,這些日期選擇器可以用在頁面上的各種日期選擇器中,但也包含在固定標題中,用戶可以在固定標題保持原位的情況下在水平和垂直方向上滾動頁面。標題也有一個日期選擇器。所以我不能做一個datepicker的全球變化。

這就是我所做的。無可否認它是一種克魯格,但它起作用,所以我認爲它可能會幫助其他人。希望將來jquery datepicker將添加一個位置選項。

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); 
}