2011-04-16 25 views
0

我有一個錯誤消息,我想定位在違規的li元素上。我得到元素的位置並試圖在其頂部放置隱藏的div和半透明度。下面是我迄今爲止..使用jquery.position的DIV位置似乎不起作用

腳本

function error_msg(error,id) 
{ 
var p = $(id); 
var position = p.position(); 
$(".overlay").css("left: " + position.left + ", top: " + position.top); 
$(".overlay").width(p.innerWidth()) 
$(".overlay").height(p.innerHeight()) 
$(".overlay").fadeIn(); 
} 

(id是李的元素的id)這樣做計算正確的位置,但它會被忽略。

CSS

div.overlay { 
    font-size: 20px; 
    margin-bottom: -1px; 
    background-color: rgba(247, 40, 40, 0.6); 
    z-index: 10000;  
    border-bottom: 2px solid #000; 
    border-top: 1px solid #4a4b4d; 
    } 

的Html

<ul> 
<div class="overlay" style="position: absolute; display: none;" id="error_li" onClick="hideMsg()">some error message</div> 
<li id="item_1">stuff</li> 
<li id="item_2">stuff</li> 
<li id="item_3">stuff</li> 
<li id="item_4">stuff</li> 
<li id="item_5">stuff</li> 
</ul> 

當過這個觸發它總是把股利在列表或位置0,0的頂部。任何我要出錯的線索?

回答

4
$(".overlay").css("left: " + position.left + ", top: " + position.top); 

該行無效。 css不設置style屬性:它直接向元素添加樣式。

你有兩種方法來做到這一點。第一種方法是使用多個css呼叫(可以把它們連爲性能&可讀性):

$('.overlay').css('left', position.left).css('top', position.top); 

或者,也可以通過一個目的是css

$('.overlay').css({ 
    left: position.left, 
    top: position.top 
}); 

由於這些是唯一的屬性position的對象,你甚至可以通過:

$('.overlay').css(position); 
+0

謝謝,不知道這是如何http://stackoverflow.com/questions/158070/jquery-how-to-position-one-element-relative-to-another/158176#158176示例工作 – maxum 2011-04-16 10:17:03

+0

@user比較職位'''和':'和','在你的例子中,你將它們作爲字符串的一部分。 – lonesomeday 2011-04-16 10:28:44

1

如果你使用Fireb如果你正在閱讀的位置正確,你可以做一個console.log(position);弄清楚。