【问题标题】:Trigger a select form element to show its options (open drop down options list) with Javascript使用 Javascript 触发选择表单元素以显示其选项(打开下拉选项列表)
【发布时间】:2011-04-20 06:59:16
【问题描述】:

这是标记

<select id="person_prefix" name="prefix">
 <option value=""></option>
 <option value="Dr" selected="selected">Dr</option>
 <option value="Mr">Mr</option>
 <option value="Ms">Ms</option>
 <option value="Mrs">Mrs</option>
</select>

我想触发一个 javascript 事件,以便选项列表下拉。使用 jquery 我尝试了以下方法:

$("#person_prefix").click();
$("#person_prefix").mousedown();
$("#person_prefix").change();

但似乎没有任何效果。这是哪个事件,如何触发?

谢谢

【问题讨论】:

标签: javascript jquery select


【解决方案1】:

您不能以编程方式跨浏览器执行此操作。您可以使用完全自定义的解决方案替换下拉列表,而不是真正显示 &lt;select&gt; 元素...但您不能以编程方式显示它,尤其是在 IE 中。 p>

您可以做的最近是通过.focus()将用户移动到元素:

$("#person_prefix").focus();

当它被聚焦时,它带有一些 CSS 样式 (:focus) 通常是吸引注意力的好方法。

【讨论】:

    【解决方案2】:

    如果您设置 size 属性,则选择将显示您指定的选项数量。

    var sel= document.getElementsByName('select_1')[0];
    var len= '10'// or sel.options.length;
    // safest: var len=sel.getElementsByTagName('*').length;
    sel.setAttribute('size',len)
    

    将大小设置回“1”会折叠选择。

    【讨论】:

    • 有些浏览器不考虑 optgroup,其他浏览器将它们视为选项,因此如果您有 2 个 optgroup 并指定 options.length 或 10,则不显示 10 个选项。
    • 对不起,我口吃并附和了我自己的评论。
    【解决方案3】:

    不能在选择表单元素上触发点击事件,但正确的解决方法是这个插件:
    jQuery.customSelect

    最大的优点是它启动了真正的select 元素(实际上你点击了一个不可见的选择-opacity: 0),这在移动设备上很重要(例如,iPhone 有自己的布局来显示select's 选项) .

    如果你不想下载整个插件,你可以自己准备解决方案,因为你知道如何触发select(通过设置opacity: 0隐藏它 - 它仍然可以点击)。

    【讨论】:

      【解决方案4】:

      基于@kennebec 的回答,一个 jQuery 版本来计算选项和 optgroups:

      var sel = $('select.mySelectClass'); 
      var count=0;
      
      sel.find('option').each(function() {
      
           count++;
      });
      
      sel.find('optgroups').each(function() {
      
           count++;
      });
      
      sel.attr('size',count);
      

      【讨论】:

      • var count = sel.find('option, optgroups').length;
      【解决方案5】:

      我曾经在寻找如何做同样的事情,但没有找到任何可行的解决方案,但后来我们 javascript 小组中的一个人提出了一个巧妙的解决方案。这是代码。

      HTML

      <input type="button" id="show" value="show" />
      <select id="myslect">
          <option>nothing</option>
          <option>something</option>
          <option>anything</option>
      </select>
      

      Javascript

      $("#show").click(function () {
          var element = $("select")[0],
              worked = false;
          if(document.createEvent) { // chrome and safari
              var e = document.createEvent("MouseEvents");
              e.initMouseEvent("mousedown", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
              worked = element.dispatchEvent(e);
          }
          if(!worked) { // unknown browser / error
              alert("It didn't worked in your browser.");
          }
      });
      

      我不知道如何链接到小组帖子,以便您可以查看整个帖子。无论如何归功于CJ Madolara。干得好!

      更新: 仅适用于 Chrome 和 Safari

      【讨论】:

      • 嘿,您的解决方案对我有用,但选择选项在点击结束时消失。在实际选择一个之前,您将如何保持选择选项的显示?
      猜你喜欢
      • 1970-01-01
      • 2020-03-02
      • 2014-11-28
      • 2012-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多