在一個頁面上,我有一個包含多個選項的選擇(多個)框。 現在我想對最後點擊的項目做出反應,以顯示一些數據與Ajax。獲取多個選擇中的最後一個點擊選項
由於選項元素上的「click」事件在IE中不起作用,所以我當前使用「change」事件。
問題是,即使我選擇了第一個選項之後的其他選項,「value」和selectedIndex屬性也指向第一個選定項目。
我可以得到最近選擇的選項的唯一方法是通過比較「更改」事件之前和之後的選定選項集。
有沒有其他辦法?
在一個頁面上,我有一個包含多個選項的選擇(多個)框。 現在我想對最後點擊的項目做出反應,以顯示一些數據與Ajax。獲取多個選擇中的最後一個點擊選項
由於選項元素上的「click」事件在IE中不起作用,所以我當前使用「change」事件。
問題是,即使我選擇了第一個選項之後的其他選項,「value」和selectedIndex屬性也指向第一個選定項目。
我可以得到最近選擇的選項的唯一方法是通過比較「更改」事件之前和之後的選定選項集。
有沒有其他辦法?
我能得到最 最近選擇選項的唯一方法是通過 之前和「改變」事件後把該組的選擇的選項 。
這可能是您最好的選擇 - 即不會報告單個選項上的點擊事件(它只會報告點擊選擇框)。
如果你確實想弄清楚哪個選項被點擊了(當聽取點擊選擇框本身時),你可以看看事件對象的offsetY
屬性(這將是鼠標光標相對的垂直偏移量到選擇框中第一個選項的頂部 - 因此它包括選擇框的滾動偏移量),並將其除以預定的選項大小(這取決於選擇框的字體大小)。
但顯然,當用戶通過鍵盤選擇選項時,這不會對您有所幫助。
以下代碼並不完美。我認爲它不能在IE6中完全正確地工作,但在IE7-8,Firefox,Safari(Win),Opera & Chrome中可以正常工作。它只記錄最後一次點擊以選擇一個值,因此取消選擇最後選擇的值而不選擇另一個值仍會返回最後選擇的(現在未選定的)索引。我將離開你來處理,如果你需要......
<html>
<head>
<title>Multiple selection indices attribute</title>
<script type='text/JavaScript'>
function oc(a) {var o={};for (var i=0;i<a.length;i++) {o[a[i]]='';}; return o;};
function getIndices(ele)
{if (!ele.prevSelected) {ele.prevSelected=new Array();}
ele.selectedIndices=new Array();
while (ele.selectedIndex != -1)
{ele.selectedIndices.push(ele.selectedIndex);
if (ele.selectedIndex in oc(ele.prevSelected)) {null;}
else {ele.newIndex = ele.selectedIndex;}
ele.options[ele.selectedIndex].selected = false;
};
for (var i=0;i<ele.selectedIndices.length;i++)
{ele.options[ele.selectedIndices[i]].selected = true;};
ele.prevSelected=new Array();
if (ele.selectedIndices)
{for (var i=0;i<ele.selectedIndices.length;i++)
{ele.prevSelected.push(ele.selectedIndices[i]);}
}
};
function display(ele) {if (ele.newIndex) {alert('Last selection: '+ele.newIndex);}};
</script>
</head>
<body onload='getIndices(document.getElementById("mine"));'>
<select multiple='multiple' id='mine' size='10' onclick='getIndices(this);'>
<option value='A'> 0</option><option value='B'> 1</option>
<option value='C'> 2</option><option value='D'> 3</option>
<option value='E'> 4</option><option value='F'> 5</option>
<option value='G'> 6</option><option value='H'> 7</option>
<option value='I'> 8</option><option value='J'> 9</option>
<option value='K'>10</option><option value='L'>11</option>
<option value='M'>12</option><option value='N'>13</option>
<option value='O'>14</option><option value='P'>15</option>
</select>
<input type='button' value='Show' onclick='display(document.getElementById("mine"));' />
</body>
如果添加點擊監聽器選擇,並期待在事件的目標,會是選擇?如果這是選擇,也許這將允許你做你想做的事。 – levik 2010-02-16 20:41:28
謝謝,但我已經試過了。沒有參考事件中的選項。 – Wikser 2010-02-16 20:49:18