【问题标题】:Bootstrap Multiselect - add on click/change listener to optionsBootstrap Multiselect - 添加点击/更改监听器到选项
【发布时间】:2020-03-13 18:51:57
【问题描述】:

请看我下面的例子。如何添加单击或更改侦听器以提醒更改/单击选项的值和 id(仅作为示例)。

$(function() {

  $('.chkveg').multiselect({
    includeSelectAllOption: true,
    enableHTML: true,
    optionLabel: function(element) {
        return '<img src="https://placekitten.com/'+ $(element).attr('data-img')+'"> '+ $(element).text();
    },
  });

  $(".chkveg option").change(function() {
      alert($(this).val());
  });

  $('#btnget').click(function() {
    alert($('#chkveg').val());
  });
});
.multiselect-container>li>a>label {
  padding: 4px 20px 3px 20px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="http://davidstutz.de/bootstrap-multiselect/docs/js/bootstrap-3.3.2.min.js"></script>
<link href="http://davidstutz.de/bootstrap-multiselect/docs/css/bootstrap-3.3.2.min.css" rel="stylesheet"/>
<link href="http://davidstutz.de/bootstrap-multiselect/dist/css/bootstrap-multiselect.css" rel="stylesheet"/>
<script src="http://davidstutz.de/bootstrap-multiselect/dist/js/bootstrap-multiselect.js"></script>
<form id="form1">

  <div style="padding:20px">

    <select class="chkveg" multiple>
      <option value="cheese" id="AAA" data-img="100/109">AAA</option>
      <option value="tomatoes" id="BBB" data-img="100/108">BBB</option>
      <option value="mozarella" id="CCC" data-img="100/107">CCC</option>
      <option value="mushrooms" id="DDD" data-img="100/106">DDD</option>
      <option value="pepperoni" id="EEE" data-img="100/105">EEE</option>
      <option value="onions" id="FFF" data-img="100/110">FFF</option>
    </select>

    <select class="chkveg" multiple>
      <option value="cheese2" id="AAA2" data-img="100/109">AAA2</option>
      <option value="tomatoes2" id="BBB2" data-img="100/108">BBB2</option>
      <option value="mozarella2" id="CCC2" data-img="100/107">CCC2</option>
      <option value="mushrooms2" id="DDD2" data-img="100/106">DDD2</option>
      <option value="pepperoni2" id="EEE2" data-img="100/105">EEE2</option>
      <option value="onions2" id="FFF2" data-img="100/110">FFF2</option>
    </select>
    
    <br /><br />

    <input type="button" id="btnget" value="Get Selected Values" />

  </div>

</form>

例如如果我选择 AAA,它应该会提醒“cheese”和 id “AAA”, 如果我然后选择 BBB 它应该提醒“西红柿”和 id “BBB”

jsfiddle

【问题讨论】:

    标签: javascript jquery twitter-bootstrap bootstrap-multiselect


    【解决方案1】:
    $(".chkveg").change(function() {
          let opts = $(this).find("option:selected");
          let last = opts.last();
          alert(last.val() +  " : " + last.attr("id"));
      });
    

    请在此处查看更新的 Fiddle:https://jsfiddle.net/t05sa63y/1/

    【讨论】:

    • 然后它一次显示所有值。例如。如果我选择 AAA,那么它会提示“奶酪”,但如果我选择 BBB,那么它会提示“奶酪,西红柿”,而不仅仅是“西红柿”
    • 你好像没看懂问题。
    • 不起作用,如果您取消选择它,则显示undefined: undefined。或者如果你选择 AAA,然后是 CCC,然后是 BBB,它会显示 CCC,因为 CCC 是最后一个。检查我的答案,看看应该怎么做。
    【解决方案2】:

    我想通了。您必须使用多选中的onChange 函数。

    $('.chkveg').multiselect({
        enableHTML: true
        ,optionLabel: function(element) {
            return '<img src="https://placekitten.com/'+ $(element).attr('data-img')+'"> '+ $(element).text();
        }
        ,onChange : function(option, checked) {
    
            alert(option.attr("id"));
            alert(option.val());
        }
    });
    

    完整示例:

    $(function() {
    
    
      $('.chkveg').multiselect({
          enableHTML: true
          ,optionLabel: function(element) {
              return '<img src="https://placekitten.com/'+ $(element).attr('data-img')+'"> '+ $(element).text();
          }
          ,onChange : function(option, checked) {
    
              alert(option.attr("id"));
              alert(option.val());
          }
      });
    
      $(".chkveg option").change(function() {
          alert($(this).val());
      });
    
      $('#btnget').click(function() {
        alert($('#chkveg').val());
      });
    });
    .multiselect-container>li>a>label {
      padding: 4px 20px 3px 20px;
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="http://davidstutz.de/bootstrap-multiselect/docs/js/bootstrap-3.3.2.min.js"></script>
    <link href="http://davidstutz.de/bootstrap-multiselect/docs/css/bootstrap-3.3.2.min.css" rel="stylesheet"/>
    <link href="http://davidstutz.de/bootstrap-multiselect/dist/css/bootstrap-multiselect.css" rel="stylesheet"/>
    <script src="http://davidstutz.de/bootstrap-multiselect/dist/js/bootstrap-multiselect.js"></script>
    <form id="form1">
    
      <div style="padding:20px">
    
        <select class="chkveg" multiple>
          <option value="cheese" id="AAA" data-img="100/109">AAA</option>
          <option value="tomatoes" id="BBB" data-img="100/108">BBB</option>
          <option value="mozarella" id="CCC" data-img="100/107">CCC</option>
          <option value="mushrooms" id="DDD" data-img="100/106">DDD</option>
          <option value="pepperoni" id="EEE" data-img="100/105">EEE</option>
          <option value="onions" id="FFF" data-img="100/110">FFF</option>
        </select>
    
        <select class="chkveg" multiple>
          <option value="cheese2" id="AAA2" data-img="100/109">AAA2</option>
          <option value="tomatoes2" id="BBB2" data-img="100/108">BBB2</option>
          <option value="mozarella2" id="CCC2" data-img="100/107">CCC2</option>
          <option value="mushrooms2" id="DDD2" data-img="100/106">DDD2</option>
          <option value="pepperoni2" id="EEE2" data-img="100/105">EEE2</option>
          <option value="onions2" id="FFF2" data-img="100/110">FFF2</option>
        </select>
        
        <br /><br />
    
        <input type="button" id="btnget" value="Get Selected Values" />
    
      </div>
    
    </form>

    【讨论】:

      【解决方案3】:

      你可以做这样的事情来处理点击/更改

      从值中获取 id 的函数

      function getID(value){
         let ids={
         cheese:"AAA",
         tomatoes:"BBB",
         mozarella:"CCC",
         mushrooms:"DDD",
         pepperoni:"EEE",
         onions:"FFF",
         cheese2:"AAA2",
         tomatoes2:"BBB2",
         mozarella2:"CCC2",
         mushrooms2:"DDD2",
         pepperoni2:"EEE2",
         onions2:"FFF2"
         }
      return ids[value];
      

      }

       $(":checkbox").click((e)=>{
        console.log("value ",e.target.value);
        console.log("checked ",e.target.checked)
      console.log("id",getID(e.target.value));
      })
      

      【讨论】:

      • 我必须再次将其标记为未解决。如何获取选项的 ID?我试过e.target.id 没有成功。
      • @Black 您在点击时获得价值,因此使用该价值您可以轻松获得 id
      • @Jatinparmar,好的,这是一个可能的解决方案,我可以生成 ID 的服务器端。但是如果没有更好的解决方案,我只会这样解决。谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-10
      • 1970-01-01
      • 1970-01-01
      • 2018-04-12
      • 1970-01-01
      • 2018-02-11
      • 2018-12-27
      相关资源
      最近更新 更多