简体   繁体   English

刷新引导程序多选后无法解除绑定和重用搜索按钮

[英]Can't unbind and reuse search button after refresh of bootstrap multiselect

I'm using js bootstrap multiselect http://davidstutz.de/bootstrap-multiselect/ and trying to load the options via ajax.我正在使用 js bootstrap multiselect http://davidstutz.de/bootstrap-multiselect/并尝试通过 ajax 加载选项。 In the below demonstration I used some static data.在下面的演示中,我使用了一些静态数据。

Both work the first time, but I can't click the button ( .multiselect-menu .multiselect-search-icon ) again after I refresh the multiselect .这两个工作的第一次,但我不能点击按钮( .multiselect-menu .multiselect-search-icon )后再次刷新我的multiselect

I tried to set the click off etc. ... but nothing helps.我试图设置点击关闭等......但没有任何帮助。 I also tried to add the button again after the multiselect is rebuilt.我还尝试在重建多选后再次添加按钮。 That's what I have:这就是我所拥有的:

$(document).ready(function() {

  $('#DTE_Field_groups_access-user_id').multiselect({
    maxHeight: 250,
    buttonWidth: '100%',
    enableCaseInsensitiveFiltering: true,
    nonSelectedText: 'Select',
    templates: {
      ul: '<ul class="multiselect-container dropdown-menu multiselect-menu"></ul>',
      filter: '<li class="multiselect-item filter"><div class="input-group"><span class="input-group-addon multiselect-search-icon" style="cursor:pointer;"><i class="glyphicon glyphicon-search"></i></span><input class="form-control multiselect-search" type="text"></div></li>',
      li: '<li class="ms-item"><a class="myCheckboxLink" tabindex="0"><span class="myCheckboxSpan"><i class="fa fa-check fa-check-checkbox" aria-hidden="true"></i></span><label></label></a></li>'
    }
  });
    
    var searchField = '';
    searchField += '<li class="multiselect-item filter" value="0">'
    + '<div class="input-group">'
    + '<span class="input-group-addon multiselect-search-icon"><i class="glyphicon glyphicon-search"></i></span>'
    + '<input class="form-control multiselect-search" type="text" placeholder="Search">'
    + '<span class="input-group-btn">'
    + '<button class="btn btn-default multiselect-clear-filter" type="button"><i class="glyphicon glyphicon-remove-circle"></i></button>'
    + '</span>'
    + '</div>'
    + '</li>'
    $('.multiselect-menu').append(searchField);

    $('.multiselect-menu li.multiselect-item .input-group-addon').css({"cursor": "pointer"});
    $('.multiselect-menu li.ms-item').css({"display": "none"});
    

  //$('.multiselect-menu .multiselect-search-icon').on('click', function (e) {
  $('#accessTemplate').on('click', '.multiselect-menu .multiselect-search-icon', function(e) {
    e.preventDefault();
    e.stopPropagation();
    console.log('search');

    var arrUserID = [{
        label: "peter.pan@testvulcano.com (1)",
        value: "1"
      },
      {
        label: "joe.shark@hollaholla.com (2)",
        value: "2"
      },
      {
        label: "lord.rabbit@quickthunder.com (3)",
        value: "3"
      }
    ];

    $('#DTE_Field_groups_access-user_id').multiselect('dataprovider', arrUserID);
    $('#DTE_Field_groups_access-user_id').multiselect('refresh');

  });

});

How can I reuse the search button so the search keeps coming in the console?如何重用搜索按钮以便搜索不断进入控制台?

Here is a fiddle Fiddle:这是一个小提琴小提琴:

https://jsfiddle.net/hp7orjma/ https://jsfiddle.net/hp7orjma/

If you open and click on the search icon ... you can see in the console 'search' ... but it won't do it more than once.如果您打开并单击搜索图标……您可以在控制台中看到“搜索”……但它不会多次执行。

I'm not really familiar with jQuery but my guess is that when you reset the dataprovider for some reason the page gets regenerated or something like that which causes the search icon to lose the listener.我对 jQuery 不是很熟悉,但我的猜测是,当您出于某种原因重置数据提供程序时,页面会重新生成或类似导致搜索图标丢失侦听器的内容。 I split the code into smaller functions so this way debugging is easier.我将代码拆分成更小的函数,这样调试就更容易了。 This worked for me.这对我有用。

function setData() {
  var arrUserID = [
    {
      label: "peter.pan@testvulcano.com (1)",
      value: "1",
    },
    {
      label: "joe.shark@hollaholla.com (2)",
      value: "2",
    },
    {
      label: "lord.rabbit@quickthunder.com (3)",
      value: "3",
    },
  ];

  $("#DTE_Field_groups_access-user_id").multiselect("dataprovider", arrUserID);

  $("#DTE_Field_groups_access-user_id").multiselect("rebuild");
  reset();
}

function reset() {
  $("#search").click(function (e) {
    e.preventDefault();
    e.stopPropagation();
    setData();
  });
}

If you use these functions change your ready listener to the following:如果您使用这些函数,请将您准备好的侦听器更改为以下内容:

$(document).ready(function () {
  $("#DTE_Field_groups_access-user_id").multiselect({
    maxHeight: 250,
    buttonWidth: "100%",
    enableCaseInsensitiveFiltering: true,
    nonSelectedText: "Select",
    templates: {
      ul:
        '<ul class="multiselect-container dropdown-menu multiselect-menu"></ul>',
      filter:
        '<li class="multiselect-item filter"><div class="input-group"><span id="search" class="input-group-addon multiselect-search-icon" style="cursor:pointer;"><i class="glyphicon glyphicon-search"></i></span><input class="form-control multiselect-search" type="text"></div></li>',
      li:
        '<li class="ms-item"><a class="myCheckboxLink" tabindex="0"><span class="myCheckboxSpan"><i class="fa fa-check fa-check-checkbox" aria-hidden="true"></i></span><label></label></a></li>',
    },
  });

  var searchField = "";
  searchField +=
    '<li class="multiselect-item filter" value="0">' +
    '<div class="input-group">' +
    '<span id="search" class="input-group-addon multiselect-search-icon"><i class="glyphicon glyphicon-search"></i></span>' +
    '<input class="form-control multiselect-search" type="text" placeholder="Search">' +
    '<span class="input-group-btn">' +
    '<button class="btn btn-default multiselect-clear-filter" type="button"><i class="glyphicon glyphicon-remove-circle"></i></button>' +
    "</span>" +
    "</div>" +
    "</li>";
  $(".multiselect-menu").append(searchField);

  $(".multiselect-menu li.multiselect-item .input-group-addon").css({
    cursor: "pointer",
  });
  $(".multiselect-menu li.ms-item").css({ display: "none" });
  //$('.multiselect-menu .multiselect-search-icon').on('click', function (e) {
  reset();
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM