Primefaces 将对话框定位在javascript变量定义的位置

Primefaces 将对话框定位在javascript变量定义的位置,primefaces,Primefaces,如何在javascript变量定义的x、y坐标处动态定位primefaces对话框 我的尝试:- 我尝试通过javascript本身来实现这一点,但通过以下代码设置位置失败: var dialog_x=300; var dialog_y=500; var s = document.getElementById("dialogId"); s.style.position = "relative"; s.style.

如何在javascript变量定义的x、y坐标处动态定位primefaces
对话框

我的尝试:-

我尝试通过javascript本身来实现这一点,但通过以下代码设置位置失败:

        var dialog_x=300;
        var dialog_y=500;

        var s = document.getElementById("dialogId"); 
        s.style.position = "relative";
        s.style.left = dialog_x + "px";
        s.style.top = dialog_y + "px";
注意,这个dialogId是我在dialog的id属性中定义的。当我知道父容器的id也被附加到此id之后,我也尝试使用结果id(在附加之后),但它不起作用

编辑:
我发现对话框容器(包含对话框的标题和内容)没有分配任何id,这就是我无法访问对话框的原因。我希望为该容器分配通过对话框组件上的id属性定义的id。我仍然无法理解在未分配任何id的情况下如何检索此元素。我定义的id实际上已分配给主对话框容器内的对话框内容容器。

使用
jQuery
,您可以调用
javascript
方法,该方法将在对话框显示时调整对话框的位置

    <h:form prependId="false">
        <p:commandButton value="Select Location" oncomplete="TreeDialog.show()" id="selectLocationButton"></p:commandButton>
    </h:form>
    <p:dialog header="Select the location" id="treeDialog"
            widgetVar="TreeDialog"
            modal="true" onShow="adjustPositionning($('#selectLocationButton'), $('#treeDialog'))" width="450">
        <p:tree value="#{myController.root}" var="node" dynamic="true" cache="true">  
        <p:treeNode>  
            <h:outputText value="#{node.name}" />  
        </p:treeNode>  
        </p:tree>  
    </p:dialog>

<script type="text/javascript">
function adjustPositionning(sourceElement, dialog) {
    var x = sourceElement.offset().left;
    var y = sourceElement.offset().top;
    var width = sourceElement.width();
    var padding = 15;
  dialog.parent().offset({ top: y, left: x + width + padding });
}
</script>

功能调整定位(sourceElement,对话框){
var x=sourceElement.offset().left;
var y=sourceElement.offset().top;
var width=sourceElement.width();
var=15;
dialog.parent().offset({top:y,left:x+width+padding});
}

可能需要将其设置为相对
s.style.position=“relative”
您可以尝试设置为绝对,
s.style.position=“绝对”?我也尝试过这样做,但我想问题是我甚至无法用我分配给它的Id检索javascript中的dialog元素。听起来你有更基本的问题。如果您没有下载并安装Firefox的Firebug插件,我强烈建议您这样做。使用它,您将能够在DOM上搜索元素,并能够找到对话框的实际Id。我试着检索我在那里看到的id为的对话,但是没有停止,想想你刚才写了什么。实际上,您声称
document.getElementById
无法正常工作。唯一的原因是您传递了错误的id。可能有多个DOM元素具有相同的id。您需要更仔细地检查dialogId是什么,以及传递给
document.getElementById
的是什么。