我想使用来自felixnagel的jquery ui selectmenu。它有效,但我有一个问题,即jquery总是为selectmenu设置一个太小的宽度,以便打开/关闭图标出现在内容上方。我知道我可以在命令selectmenu()中设置宽度,但我有几个不同的选择菜单,所以我想知道在哪里可以影响正确计算选择菜单的宽度,这样我就可以给它是宽度的另一个px。
我试图在.js文件中找到它,但从现在开始我没有成功。希望你们中的某个人知道我能在这里做些什么。
非常感谢
Ruven
答案 0 :(得分:10)
这很简单,可以根据内容进行调整。
$( "select" ).selectmenu({ width : 'auto'});
这使用硬编码宽度来避免在选择注释中提到的不同宽度的项目时出现问题:
$( "select" ).selectmenu({ width : 250});
答案 1 :(得分:8)
也许这样的事情会帮助你
<select width="200">
<option>Small</option>
</select>
$(document).ready(function(){
$.each($('select'), function () {
$(this).selectmenu({ width : $(this).attr("width")})
})
})
您遍历每个选择元素,您将有可能在选择元素width属性中指定with。也许你发现它很有用,可以修改它以满足你的需求。
编辑1: 或者如果你只是想通过代码添加一些东西(我想你也可以用CSS做),你可以使用类似的东西:
<select>
<option>Small</option>
</select>
$(document).ready(function(){
$.each($('select'), function () {
$(this).selectmenu({ width : $(this).width() + 100}) // You just take the width of the current select and add some extra value to it
})
})
答案 2 :(得分:1)
这是一种黑客攻击,我不知道这有多强大,但我已经在一个特定的例子中成功使用了它:
$("select").each(function(){
var $this=$(this);
$this.selectmenu();
var menu=$this.selectmenu("menuWidget");
var button=$this.selectmenu("widget");
button.click();
var longest=null;
menu.children("li").each(function(){
var $this=$(this);
if(longest==null || longest.text().length < $this.text().length){
longest=$this;
}
});
menu.css("width","auto");
var width=longest.mouseover().width();
button.click();
var innerButton = button.find(".ui-selectmenu-text");
var paddingRight=parseFloat(innerButton.css("padding-right"));
var paddingLeft=parseFloat(innerButton.css("padding-left"));
var total=width+paddingLeft+paddingRight + 2;
$this.selectmenu("option","width", total);
})
简而言之它的作用是:
它只是在很大程度上依赖于jquery-ui如何在内部处理事务,所以它可能会在任何更新时中断。
看到这个小提琴:shape intersection
答案 3 :(得分:0)
以前的解决方案几乎是正确的。
你必须设置css宽度并像这样调用 selectmenu :
$('select').selectmenu({ width : $(this).css('width')});
答案 4 :(得分:0)
百分比,如下所示:
在CSS中声明百分比:
select{
width: 100%;
}
在你的JavaScript中:
jQuery("select").selectmenu(
{
width: jQuery(this).attr("width"),
}
);