【问题标题】:How to identify double click in SELECT element with multiple如何识别具有多个的 SELECT 元素中的双击
【发布时间】:2010-02-21 13:06:31
【问题描述】:

我有一个带有 MULTIPLE 属性的 SELECT 元素。当双击列表中的一个选项时,我想根据被单击的选项执行操作

我了解 OPTION 元素不处理 ondblclick 事件。如果我处理 SELECT 元素的 dblclick 事件,是否有某种方法可以识别双击了哪个选项?

<select size="4" name="MySelect" multiple="multiple" ondblclick="myFunction();">
    <option ... />
    ...
</select>

最好是跨浏览器,但只有 IE 可以。

编辑

我显然不够清楚。我需要做的是从事件处理程序中识别 哪个选项被双击(或者双击是在没有选项的 SELECT 元素的区域中)。查找 selectedIndex 是不行的,因为 SELECT 元素具有 MULTIPLE 属性:如果用户在双击时按住 CTRL 或 SHIFT,则会选择多个项目:我只想要实际双击的选项。

【问题讨论】:

  • "但 IE 只会做" - 好吧,如果它在 IE 中工作,它就是跨浏览器;)

标签: javascript html javascript-events


【解决方案1】:

试试这个:

document.getElementById('selectID').ondblclick = function(){
    alert(this.selectedIndex);
    // or alert(this.options[this.selectedIndex].value);
};

如果你双击一个项目,你会选择它,所以你可以使用 this.selectedIndex。

【讨论】:

  • 不,选择允许多选。 this.selectedIndex 将给出 first 选定选项的索引,不一定是双击的那个。
  • 使用selectedOptions,它返回一个HTMLCollection,你可以像数组一样循环/迭代。 selectedIndex 将是第一个,或者 -1 如果没有。
【解决方案2】:
<select onDblClick="alert(this.value)">  
   <option>Barney</option>
   <option>Ted</option>
   <option>Marshall</option>
</select>

【讨论】:

    【解决方案3】:

    为什么不能在选项上附加事件?它在这里工作正常(在 Firefox 3.6 中使用和不使用 jquery 进行测试)。

    <select size="4" name="MySelect" multiple="multiple">
        <option>hello</option>
        <option>aoeu</option>
        <option>ieao</option>
        <option>.yao</option>
    </select>
    <script type="text/javascript">
        $(function(){
            $("option").bind("dblclick", function(){
                alert($(this).text());
            });
        });
    </script>
    

    【讨论】:

    • 我相信他需要它可以与 IE 一起使用,firefox 是可选的。
    • 我尝试附加一个事件(不使用上面的 jquery),但它不适用于 IE :( 正如 Nick Craver 所说,IE 是强制性的,跨浏览器是不错的(一个仍在使用 IE6 的企业环境!!!)
    【解决方案4】:

    按照哈门写的..下面会提醒双击选项的值..(跨浏览器)

    document.getElementById('selectID').ondblclick = function(e){
        var evt = window.event || e;
        var elem = evt.srcElement || evt.target;
        alert(elem.value);
    };​
    

    【讨论】:

    【解决方案5】:

    如果您希望所选值采用新形式,请使用以下组合: 使用 onclick 或 dblclick:

        <form name="Editcust" action="select_cust_process.php" method="post">
        <select name="mydropdownEC"  onMouseOver="this.size=10;" onclick='this.form.submit()'>
        <option ... />
         ...
        </select>        
        <br /><input type="submit" name="btn_submit" value="&nbsp;&nbsp;Select&nbsp;&nbsp;"/> 
        </form>
    

    在 select_cust_process.php 里面我有:

        $TBLrow = $_POST['mydropdownEC'];
        echo $TBLrow;
    

    【讨论】:

      【解决方案6】:

      你不能用&lt;div/&gt; 包装它吗?像这样的

      HTML:

      <select>
         <option value="x">
            Option text goes here
            <div class="option-dbclickable" style="position:absolute; left:0; right:0; top:0; bottom:0; z-index:999;"></div>
         </option>
      </select>
      

      JS:

      document.getElementsByClassName('.option-dbclickable').ondblclick = function(){
         alert(this.parentNode.value);
      };
      

      我还没有测试过,但理论上它可能有效。我在许多表单元素上使用了这个技巧,但不幸的是,双击时没有多选。

      【讨论】:

      • 试过这样包裹,但是
      • @SebastianReimer 你在option标签的点击事件上试过event.preventDefault()吗?
      猜你喜欢
      相关资源
      最近更新 更多
      热门标签