11

如何通过按钮打开选择下拉菜单?

$('button').on('click', function() {
   $('select').trigger('click');
});

我的代码:http: //jsfiddle.net/UGkWp/

更新:
我找到了 webkit 浏览器的解决方案,但只有这些浏览器:http: //jsfiddle.net/UGkWp/2/也许你知道如何在每个浏览器中做到这一点?

4

7 回答 7

8

你可以只用这样的 CSS 来做到这一点:

<html>
<body>

<div class="sorting">
<div class="sort right"><label>
<span>Items per page</span>
    <select>
    <option value="">Items per page</option>
    <option value="10">10</option>
    <option value="20">20</option>
    <option value="40">40</option>
    <option value="60">60</option>
    <option value="100">100</option>
    <option value="200">200</option>
    </select>

    <span class="pointer"><i class="fa fa-caret-down"></i></span>
    </label>
    </div>
    </div>


</body>
</html>
<style>
select{
  -webkit-appearance:none;
    appearance:none;
      -moz-appearance:none;
}
.sorting{
    padding:5px 10px;
    border:1px solid #eee;
    clear:both;
  background:#FFF;
  height:40px;
}
.sorting h4{
    padding:4px 0 0;
    margin:0;
}
.sort{
    position:relative;  
    padding-left:10px;
  float:left;
}
.sort>label{
    font-weight:normal !important
}
.sort span.pointer{
    height:30px;
    width:30px;
    border-left:1px solid #ddd;
    position:absolute;
    right:0;
    top:0;
    text-align:center;
    color:#c49633;
    font-size:20px;
    z-index:1;
}
.sort span.pointer i{
    margin-top:6px;
}
.sorting select{
    padding:5px 40px 5px 10px !important;
    margin-left:10px;
    border:1px solid #eee;
    background:none;
    height:30px;
    position:relative;
    z-index:2;
}
</style>

访问这个小提琴了解更多细节:https ://jsfiddle.net/ssjuma/1mkxw2nb/1/

于 2016-10-09T13:06:33.757 回答
7
(function($) {
    "use strict";
    $.fn.openSelect = function()
    {
        return this.each(function(idx,domEl) {
            if (document.createEvent) {
                var event = document.createEvent("MouseEvents");
                event.initMouseEvent("mousedown", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
                domEl.dispatchEvent(event);
            } else if (element.fireEvent) {
                domEl.fireEvent("onmousedown");
            }
        });
    }
}(jQuery));
$('#country').openSelect();

http://jsfiddle.net/yqs90jdw/

于 2015-07-07T13:59:54.720 回答
1

我认为你应该看看这个页面:

我可以使用 jQuery 打开下拉列表吗

似乎无法直接执行此操作,但存在工具可以模拟您尝试执行的操作。

一个简单的解决方案是使用 jquery 的“chosen”插件:http: //harvesthq.github.io/chosen/

与普通选择相比,这也为您提供了一些很大的优势,并且易于使用。

在此您可以简单地触发一个“mousedown”事件,如下所示:

$('#dropdown_id_chzn').trigger('mousedown')

鉴于您在页面上启用了(和 jquery),下面的代码应该可以解决问题:

HTML:

<select name="foo">
  <option value="1">Bar</option>
</select>

JavaScript:

$('select[name="foo"]').chosen();
$('#foo_chzn').trigger('mousedown');

请注意,选择会自动将“_chzn”附加到您的下拉名称中,这是您应该在选择器中使用的名称

于 2013-10-17T16:56:14.810 回答
0

希望这有帮助

<select id="s">
    <option>aaaaa</option>
    <option>bbbbb</option>
    <option>ccccc</option>
</select>

<button>button</button>

$("button").click(function () {
    var size = $('#s option').size();
    if (size != $("#s").prop('size')) {
        $("#s").prop('size', size);
    } else {
        $("#s").prop('size', 1);
    }
})
于 2013-10-17T16:54:14.150 回答
0

你当然不需要两个不同的元素来实现这一点,如果你想要一个按钮,点击后可以打开选项。

您只需要一个选择元素,然后使用 css 从选择元素中删除下拉箭头。

在这里查看

.schedulAllselect {
    appearance: none;
 }
<select id="" class="schedulAllselect">
  <option value="">SCHEDULE ALL</option>
  <option value="online" id="onlineOpt">Online Interview</option>
  <option value="offline" id="offlineOpt">Offline Offline</option>
</select>

于 2021-10-25T15:40:34.533 回答
0

我在这里找到了一个很好的解决方案: https ://stackoverflow.com/a/18284923/8472295

在您的情况下,您可以将按钮包装在标签中并应用相同的解决方案。

HTML

<label for="orderby">
    <button type="button">
        <span>Sort</span>
    </button>
</label>
<select id="orderby" name="orderby" class="orderby" aria-label="Sort By">
    <option value="date" selected="selected">Latest</option>
    <option value="popularity">Popularity</option>
    <option value="rating">Average rating</option>
    <option value="price">Price: low to high</option>
    <option value="price-desc">Price: high to low</option>
</select>

JS

$("label").mouseover(function(){
    var $this = $(this);
    var $input = $('#' + $(this).attr('for')); 
    if ($input.is("select") && !$('.lfClon').length) {
        var $clon = $input.clone();
        var getRules = function($ele){ return {
            position: 'absolute',
            left: $ele.offset().left,
            top: $ele.offset().top,
            width: $ele.outerWidth(),
            height: $ele.outerHeight(),
            opacity: 0,
            margin: 0,
            padding: 0
        };};
        var rules = getRules($this);
        $clon.css(rules);
        $clon.on("mousedown.lf", function(){
            $clon.css({
                marginLeft: $input.offset().left - rules.left,
                marginTop: $input.offset().top - rules.top,
            });
            $clon.on('change blur', function(){
                $input.val($clon.val()).show();
                $clon.remove();
            });
            $clon.off('.lf');
        });
        $clon.on("mouseout.lf", function(){
            $(this).remove();
        });
        $clon.prop({id:'',className:'lfClon'});
        $clon.appendTo('body');
    }
});

演示:http: //jsfiddle.net/Yh3Jf/24/

js 创建了一个 select 元素的克隆,它更新了原始元素。

经过测试并为我工作,在我的情况下,我用它来隐藏带有 css 的选择字段,然后按钮触发一个可以进行选择的下拉菜单。

于 2019-06-12T09:12:33.440 回答
-14

我想这会对你有所帮助..

Trigger documentation

$('button').on('click', function() {
    $('select').trigger('click');
});

$('select').click(function(){
alert($(this).val());
});

小提琴Here

于 2013-10-17T18:02:11.240 回答