2012-03-30 105 views
4

我有一個web應用程序需要知道多選列表中選項元素的位置(x/y不是索引!)。它在Firefox中效果很好,但在Chrome或IE中沒有骰子。JavaScript獲取期權元素的位置?

是否有可能通過JavaScript在Chrome/IE中獲得選項的位置?

這是我的小提琴顯示問題:http://jsfiddle.net/jamiller619/Kbh4g/3/適用於Firefox,但不適用於IE/Chrome。

+2

爲什麼你需要做到這一點? – j08691 2012-03-30 19:05:29

+0

@ j08691因爲我讓用戶將選項添加到已定義的選擇列表中。我認爲在新的選項元素上面追加一個文本框會很好,所以他們可以輸入一個新的值。我的選擇列表可以很容易地更改爲UL,但可能比使用SELECT multiple = multiple – Jeff 2012-03-30 19:21:19

+0

的工作多一點。對我來說,嗯,對於我來說,位置總是0,非常奇怪!你可以在你的評論中做你想做的事情,而不必使用可能會更容易的職位。 – mattytommo 2012-03-30 20:03:31

回答

2

簡答 - 你不能(webkit問題)。

但你可以作弊!

HTML:

<div style="position:relative"> 
<select multiple="multiple"> 
    <option>Test 1</option> 
    <option>Test 2</option> 
    <option>Test 3</option> 
    <option>Test 4</option> 
    <option>Test 5</option> 
    <option>Test 6</option> 
    <option>Test 7</option> 
    <option>Test 8</option> 
    <option>Test 9</option> 
    <option>Test 10</option> 
</select> 
</div> 
<br /> 
option position:<br /> 
Left: <span id="pos-x"></span><br /> 
Top: <span id="pos-y"></span> 

CSS:

select 
{ 
    font-size:20px;  
}​ 

JQuery的:

$(function() 
{  
    $('select').change(function() { 
     var optionHeight = 20; // or get this value from the stylesheet or inline-style 
     var textIndent = 1; // best guess or work it out using coordinate crosshair tool 
     $('#pos-y').text((this.selectedIndex + 1) * optionHeight); 
     $('#pos-x').text(this.offsetLeft + textIndent); 
    }); 
}); 

這是一個快速和骯髒的解決方案!

UPDATE

CSS:

select 
{ 
    height: 150px; 
    font-size: 20px;   
} 

JQuery的:

$(function() 
{  
    $('select').change(function() { 
     var fontSize = 20; // or get this value from the stylesheet or inline-style 
     var lineHeight = fontSize + 4 // need a better calculation here 
     var optionHeight = lineHeight; 
     var textIndent = 1; // best guess or work it out using coordinate crosshair tool 
     var top = (this.selectedIndex * optionHeight) - this.scrollTop; 
     $('#pos-y').text(top); 
     $('#pos-x').text(this.offsetLeft + textIndent); 
    }); 
}); 
+0

字體大小在大多數情況下不等於高度!另外,邊界寬度,填充和邊距如何?你可以這樣做,但它會花費更多。 – Thomas 2012-03-30 20:47:48

+0

如果選擇列表將滾動,則代碼「pos-y」將會出錯。 – Engineer 2012-03-30 20:48:23

+0

@TomSchoffelen選項元素不應該有邊框,填充或邊距,並且無論如何都不會在chrome中工作 - 加上行高並不難。 – 2012-03-30 20:55:39