【问题标题】:How to change the width of the dropdown using Bootstrap Multiselect plugin for jQuery?如何使用 jQuery 的 Bootstrap Multiselect 插件更改下拉菜单的宽度?
【发布时间】:2015-07-16 11:50:45
【问题描述】:

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

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

问题在于 $(this) 似乎不是 DOM 节点,尽管我希望它是 #flavor

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

【问题讨论】:

  • 你有什么小提琴什么的吗?你也忘了最后的分号。
  • @dingo_d 末尾不需要分号 ;) 问题已经解决,正确答案已经被选中。我的问题的解决方案是将 $(this) 替换为 $(event.currentTarget)。

标签: jquery css twitter-bootstrap bootstrap-multiselect


【解决方案1】:

您可以使用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 代码有效。

【讨论】:

  • 我在一页上有多个多选框。我希望菜单具有响应性,因此在打开时我需要根据窗口的宽度和多选框的位置动态更改菜单的宽度。所以它不能只是一些 CSS。
  • 上面的示例代码显示了如何定位特定的多选。响应性可以不受断点和百分比宽度控制吗?有没有具体的宽度示例?
  • 多选在水平行中彼此相邻。第一个多选增长(通过检查其中的项目)导致第二个多选向右移动,从而限制了其下拉菜单的宽度。它实际上只适用于动态 JavaScript 解决方案。
  • 我已经编辑了解决方案,因此您可以根据原始选择的 id 来针对每个菜单设置一个功能。您可以更改代码以使用不同的属性来识别原始选择。
  • $(event.currentTarget) 是我想要的,谢谢!
【解决方案2】:

我认为应该改变使用最接近()的方式。尝试使用标签元素,而不是类名。

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

试试这个,如果这不起作用,请告诉我。

【讨论】:

  • 我不想更改“选择”元素。 'select' 元素实际上被插件隐藏了,所以它不会有任何效果。
猜你喜欢
  • 1970-01-01
  • 2016-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-04
  • 2021-07-25
  • 1970-01-01
相关资源
最近更新 更多