2011-07-14 77 views
12

使用jQuery UI對話框。jQuery UI對話框/拖動問題

很好用,但是當前,當我拖動一個對話框時,它不會移出屏幕(整個對話框總是在視口中)。

有沒有辦法設置對話框,以便我可以將它部分拖出屏幕?

+0

爲什麼你想部分移動屏幕? –

+7

@ViswanathanIyer:有時你需要稍稍移動它才能看到它下面的東西。我相信還有其他原因,但問題是**如何?**,而不是爲什麼。 –

+0

@ViswanathanIyer:他們掩蓋了主要區域,但包含了對該區域進行更改的工具,因此用戶可以調出對話框,進行一些調整,然後將其拖出來以查看更改。現在,他們需要關閉它,然後重新打開它。 – OneNerd

回答

10

當然,你可以,如果你擴展了jQuery的對話框代碼就包括此代碼:

$.ui.dialog.prototype._makeDraggable = function() { 
    this.uiDialog.draggable({ 
     containment: false 
    }); 
}; 

這將重寫「文檔的默認遏制值'與false禁用遏制。

+0

謝謝 - 我會修補這個,看看我能想出什麼。 – OneNerd

+0

我正在嘗試實施此修復程序,但目前還沒有運氣。我將它加載到docready外部的script.js文件中。 (在docready中也沒有工作)。 這看起來像一個全球變化。我是否需要以某種方式將其與每個對話框相關聯? – CoryDorning

+0

無視...正常工作。 – CoryDorning

2

玩選項,位置。編寫您自己的JavaScript調用來移動框。

$('#dialog').dialog('option','position',[500, 100]); 

,但你不能移動的方塊縮小視圖端口的,如果你想擁有這樣的特徵,寫自己,延長了jQuery UI的對話框,(更新代碼塊,它檢查的有效位置(有效的,如果位置x,y是在視口中)

3

我有這個相同的問題,並打算使用betamax's solution,但注意到它有效地取代了一些jQuery UI的內置功能。所以不是我適應的辦法,以保持內置功能,而且還通過覆蓋_makeDraggable而不是把遏制關閉只是徹底取代它:

if (!$.ui.dialog.prototype._makeDraggableBase) { 
    $.ui.dialog.prototype._makeDraggableBase = $.ui.dialog.prototype._makeDraggable; 
    $.ui.dialog.prototype._makeDraggable = function() { 
     this._makeDraggableBase(); 
     this.uiDialog.draggable("option", "containment", false); 
    }; 
} 
16

或者你可以在一個更簡單,更「jQuery的方式」做到了; )

 
$(document).ready(function(){ 
    $('#dialog'). 
    dialog({ 
     //your dialog options go here 
    }). 
    dialog("widget").draggable("option","containment","none"); //this chained sequence kills containment 
}); 
+1

你是男人! 我需要將一個對話框限制爲一個特定的div(將「none」改爲「#mydiv」)。這是解決方案。 –

+3

感謝... +1爲「更多jQuery方式」。 – Aries