2014-11-21 107 views
4

我試圖在被點擊的元素上方定位一個jQueryUI對話框來觸發它的打開。設置jQuery UI對話框相對於打開它的元素的位置

我試過以下,但它不工作。

$(function() { 
    dialog = $("#gridDialog").dialog({ 
    autoOpen: false, 
    modal: true, 
    buttons: { 
     "Close": function(event, ui) { 
      dialog.dialog("close"); 
     } 
    }, 
    open: function(event,ui){ 
     dialog.dialog("option", "position", {at: "left top", of: event }); 
    } 
    });   
}); 
+0

我的壞,顯然是 「事件」 傳遞給open函數不與 「位置」 功能正常工作。我在打開對話框的「onclick」事件中將源對象設置爲對話框的數據元素,在「打開」函數中讀取該數據元素並將其用於「位置: target = $(」。 dialogDialog(「option」,「position」,{my:「left top」,at:「left top」,of:target}); – user3746789 2014-11-21 03:16:00

+1

如果你解決了謎題,然後刪除問題或自己回答問題,以便它不會沒有答案。 – Kolban 2014-11-21 04:21:31

回答

6

你的方法的問題是,你想它自己的open()方法中的對話框,其接收定製的jQuery UI的事件對象,不具有pageXpageY特性,這是定位預計由jQuery UI position()方法。

相反,如果設置在打開之前的click事件處理程序對話框裏面的位置,你可以簡單地通過this,或點擊事件對象作爲position()期權的屬性的值。

例如:

$("#dialog").dialog({ 
 
    autoOpen: false 
 
}); 
 
$(".box").click(function() { 
 
    $("#dialog").dialog("option", "position", { 
 
    at: "left top", 
 
    of: this // this refers to the cliked element 
 
    }).dialog("open"); 
 
});
.box { 
 
    width: 100px; 
 
    height: 100px; 
 
    background: dodgerblue; 
 
} 
 
#left { 
 
    float: left; 
 
} 
 
#right { 
 
    float: right; 
 
}
<link href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css" rel="stylesheet" /> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script> 
 
<div id="left" class="box"></div> 
 
<div id="right" class="box"></div> 
 
<div id="dialog" title="Basic dialog"> 
 
    <p>This is the default dialog which is useful for displaying information. The dialog window can be moved, resized and closed with the 'x' icon.</p> 
 
</div>