如何使用jQuery的Bootstrap Multiselect插件更改下拉列表的宽度?

时间:2015-07-08 05:14:21

标签: jquery css twitter-bootstrap bootstrap-multiselect

我正在使用David Sutz的引导程序multiselect而我无法找到修改.dropdown-menu onDropdownShow的方法。在下面的函数中设置宽度不起作用:

$('#flavor').multiselect({
    onDropdownShow: function(event) {
        $(this).closest('.dropdown-menu').css('width','500px')
    }
});

问题出现在$(this),它似乎不是一个DOM节点,虽然我希望它是#flavor

我尝试做的是根据窗口的宽度动态更改菜单的宽度(基本上使其响应),因此每次菜单都需要执行代码被打开了。另外,我的页面上有多个多选框,因此它确实需要是没有硬编码DOM引用的通用函数,因此$(this)需要工作。

2 个答案:

答案 0 :(得分:8)

您可以使用event找出点击的按钮。从那里你可以使用简单的jQuery遍历来查找和编辑下拉菜单。

要根据打开的下拉列表获得不同的行为,可以定位原始选择的id。然后可能使用另一个函数来返回所需的任何更改。

$(document).ready(function() {
  $('.dropdowns').multiselect({
    onDropdownShow: function(event) {
      var menu = $(event.currentTarget).find(".dropdown-menu");
      var original = $(event.currentTarget).prev("select").attr("id");
     
      // Custom functions here based on original select id
      if (original === "flavour") menu.css("width", 500);
      if (original === "flavour2") menu.css("background", "red");
      
    }
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<script src="https://raw.githubusercontent.com/davidstutz/bootstrap-multiselect/master/dist/js/bootstrap-multiselect.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">

<select id="flavour" class="dropdowns" multiple="multiple">
  <option value="cheese">Cheese</option>
  <option value="tomatoes">Tomatoes</option>
  <option value="mozarella">Mozzarella</option>
  <option value="mushrooms">Mushrooms</option>
  <option value="pepperoni">Pepperoni</option>
  <option value="onions">Onions</option>
</select>

<select id="flavour2" class="dropdowns" multiple="multiple">
  <option value="cheese">Cheese</option>
  <option value="tomatoes">Tomatoes</option>
  <option value="mozarella">Mozzarella</option>
  <option value="mushrooms">Mushrooms</option>
  <option value="pepperoni">Pepperoni</option>
  <option value="onions">Onions</option>
</select>

我找不到托管插件的css的CDN,所以样式看起来会有所不同,但上面的JS代码可以工作。

答案 1 :(得分:-2)

我认为应该改变使用nearest()的方式。尝试使用tag元素,而不是类名。

$('#flavor').multiselect({
    onDropdownShow: function(event) {
        $(this).closest('select').css('width','500px')
    }
});

试试这个并告诉我这是否有用。