2011-07-14 59 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