2010-02-16 122 views
6

在一個頁面上,我有一個包含多個選項的選擇(多個)框。 現在我想對最後點擊的項目做出反應,以顯示一些數據與Ajax。獲取多個選擇中的最後一個點擊選項

由於選項元素上的「click」事件在IE中不起作用,所以我當前使用「change」事件。

問題是,即使我選擇了第一個選項之後的其他選項,「value」和selectedIndex屬性也指向第一個選定項目。

我可以得到最近選擇的選項的唯一方法是通過比較「更改」事件之前和之後的選定選項集。

有沒有其他辦法?

+0

如果添加點擊監聽器選擇,並期待在事件的目標,會是選擇?如果這是選擇,也許這將允許你做你想做的事。 – levik 2010-02-16 20:41:28

+1

謝謝,但我已經試過了。沒有參考事件中的選項。 – Wikser 2010-02-16 20:49:18

回答

2

我能得到最 最近選擇選項的唯一方法是通過 之前和「改變」事件後把該組的選擇的選項 。

這可能是您最好的選擇 - 即不會報告單個選項上的點擊事件(它只會報告點擊選擇框)。

如果你確實想弄清楚哪個選項被點擊了(當聽取點擊選擇框本身時),你可以看看事件對象的offsetY屬性(這將是鼠標光標相對的垂直偏移量到選擇框中第一個選項的頂部 - 因此它包括選擇框的滾動偏移量),並將其除以預定的選項大小(這取決於選擇框的字體大小)。

但顯然,當用戶通過鍵盤選擇選項時,這不會對您有所幫助。

1

以下代碼並不完美。我認爲它不能在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> 

相關問題