2011-07-03 89 views
2

如何在onclick事件后获取JSF组件的坐标?我需要在被点击的图标下放置一个叠加层。获取组件的坐标

有没有这样的JSF提供的内置设施,而不是手动编写一个JavaScript函数呢?

回答

3

除了BalusC的答案,这里有一个例子,其中一个组件上的点击与id=placeholder(也许一个链接或按钮),将打开直接触发部件下面的另一个组件(id=menu)。如果鼠标从触发部件移开,菜单将消失:

<script type="text/javascript"> 
jQuery(document).ready(function() { 
    jQuery("#placeholder").click(function(event) { 
    //get the position of the placeholder element 
    var pos = jQuery(this).offset(); 
    var height = jQuery(this).height(); 
    //show the menu directly below the placeholder 
    jQuery("#menu").css({ "left": pos.left + "px", "top": (pos.top + height) + "px" }); 
    jQuery("#menu").show(); 
    }); 
    // hide the menu on mouseout 
    jQuery("#placeholder").mouseout(function(event) { 
    jQuery("#menu").hide(); 
    }); 
}); 
</script> 

id=menu该组分可以是div或JSF h:panelGroup或任何其它部件。该style属性与display: none最初将隐藏的组件:

<h:panelGroup style="position: absolute; display: none;" id="menu"> 
    <!-- content here -->     
</h:panelGroup> 

确保jQuery的id选择获取该组件的正确的ID。例如。如果你的元素是一个形式里面有id=form1,jQuery的呼叫必须是这个样子:

jQuery("#form1\\:placeholder").click(function(event) 

注意双反斜线。

5

不,没有。位置依赖于浏览器(客户端)。在客户端也完全没有JSF的手段,它只是纯粹的HTML/CSS/JS。该位置只能从HTML DOM元素中提取。您必须将它从JS传递给JSF,或者完全使用JS而不是JSF完成业务工作。

随着PrimeFaces附带jQuery,检索元素相对于文档位置的最佳方法是使用jQuery.offset()

var $element = jQuery('#someid'); 
var offset = $element.offset(); 
var x = offset.left; 
var y = offset.top; 
// ... 
-3

我推荐使用像RichFaces或IceFaces这样的JSF组件库。它们中的许多都具有AJAX功能和JavaScript库集成,因此具有用于执行此类事情的组件。

+0

我正在使用primefaces,但我不知道这样的设施.. –

+0

我也不是很熟悉那个。但是,如果您发现某个功能可以开箱即用,那么没有任何技术可以阻止您添加更多的库。他们(应该)都很好地一起玩。 – Mac

+0

您应该查看服务器端(JSF)和客户端技术(javascript)的差异。 –