触发选择表单元素以使用Javascript显示其选项(打开下拉选项列表)

时间:2010-10-02 17:14:47

标签: javascript jquery select

这是标记

<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();

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

由于

5 个答案:

答案 0 :(得分:7)

我曾经在寻找如何做同样的事情并没有找到任何可行的解决方案但是我们的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

答案 1 :(得分:4)

您无法以编程方式执行此跨浏览。您可以使用完全自定义的解决方案替换下拉列表,而不是显示 <select>元素...但您无法以编程方式显示它,尤其是在IE中。

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

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

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

答案 2 :(得分:2)

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

最大的好处是它会启动真正的select元素(实际点击一个不可见的选择 - opacity: 0),这在移动设备上很重要(例如iPhone有自己的显示布局{ {1}}选项)。

如果您不想下载整个插件,则可以自行准备解决方案,因为您知道如何触发select's(通过设置select隐藏它 - 它仍然是可点击)。

答案 3 :(得分:1)

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

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”会折叠选择。

答案 4 :(得分:0)

建立@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);