我在这里找到了一个很好的解决方案:
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 的选择字段,然后按钮触发一个可以进行选择的下拉菜单。