2010-02-16 125 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> 

相关问题