如何克隆select2 v4 Ajax

我试图使用Select2 ver4 jquery插件进行AJAX调用,并尝试使用加载Select2示例页面的远程数据来克隆包含select2工具的select。但克隆时禁用select2下拉列表。

HTML代码

<tr>
<td>
<select class="js-example-data-ajax" id="sel1">
</select>
<button type="button" class="addline">Add Line</button>
</td>
</tr>

jQuery代码

     $.fn.select2.amd.require(
    ["select2/core", "select2/utils", "select2/compat/matcher"],
    function (Select2, Utils, oldMatcher) {

  var $ajax = $(".js-example-data-ajax");

  function formatRepo (repo) {
    if (repo.loading) return repo.text;

    var markup = '<div class="clearfix">' +
    '<div class="col-sm-1">' +
    '<img src="' + repo.owner.avatar_url + '" style="max-width: 100%" />' +
    '</div>' +
    '<div clas="col-sm-10">' +
    '<div class="clearfix">' +
    '<div class="col-sm-6">' + repo.full_name + '</div>' +
    '<div class="col-sm-3"><i class="fa fa-code-fork"></i> ' + repo.forks_count + '</div>' +
    '<div class="col-sm-2"><i class="fa fa-star"></i> ' + repo.stargazers_count + '</div>' +
    '</div>';

    if (repo.description) {
      markup += '<div>' + repo.description + '</div>';
    }

    markup += '</div></div>';

    return markup;
  }

  function formatRepoSelection (repo) {
    return repo.full_name || repo.text;
  }

  $ajax.select2({
    ajax: {
      url: "https://api.github.com/search/repositories",
      dataType: 'json',
      delay: 250,
      data: function (params) {
        return {
          q: params.term // search term
        };
      },
      processResults: function (data, params) {
        // parse the results into the format expected by Select2
        // since we are using custom formatting functions we do not need to
        // alter the remote JSON data, except to indicate that infinite
        // scrolling can be used
        params.page = params.page || 1;

        return {
          results: data
        };
      },
      cache: true
    },
    escapeMarkup: function (markup) { return markup; },
    minimumInputLength: 1,
  });
});

$(document).on('click', '.addline', function () {
    var $tr = $(this).closest('tr');
    var $lastTr = $tr.closest('table').find('tr:last');

    $lastTr.find('.js-example-data-ajax').select2('destroy');

    var $clone = $lastTr.clone();

    $clone.find('td').each(function() {
        var el = $(this).find(':first-child');
        var id = el.attr('id') || null;
        if (id) {
            var i = id.substr(id.length - 1);
            var prefix = id.substr(0, (id.length - 1));
            el.attr('id', prefix + (+i + 1));
            el.attr('name', prefix + (+i + 1));
        }
    });
    $tr.closest('tbody').append($clone);
    $lastTr.find('.js-example-data-ajax').select2();
    $clone.find('.js-example-data-ajax').select2();
});
$('.js-example-data-ajax').select2();
uri2x

创建克隆后,您必须为其运行完全相同的select2参数(除了已销毁的原始参数之外)。您可以将参数声明为全局变量,然后在两个地方使用它(这是更好的做法),或者再次包含它们,为了优化答案,您可以在下面看到:

$(document).on('click', '.addline', function () {
    var $tr = $(this).closest('tr');
    var $lastTr = $tr.closest('table').find('tr:last');

    $lastTr.find('.js-example-data-ajax').select2('destroy');

    var $clone = $lastTr.clone();

    $clone.find('td').each(function() {
        var el = $(this).find(':first-child');
        var id = el.attr('id') || null;
        if (id) {
            var i = id.substr(id.length - 1);
            var prefix = id.substr(0, (id.length - 1));
            el.attr('id', prefix + (+i + 1));
            el.attr('name', prefix + (+i + 1));
        }
    });
    $tr.closest('tbody').append($clone);

    // ADDED:
    $(".js-example-data-ajax").select2({
      ajax: {
        url: "https://api.github.com/search/repositories",
        dataType: 'json',
        delay: 250,
        data: function (params) {
          return {
            q: params.term // search term
          };
        },
        processResults: function (data, params) {
          // parse the results into the format expected by Select2
          // since we are using custom formatting functions we do not need to
          // alter the remote JSON data, except to indicate that infinite
          // scrolling can be used
          params.page = params.page || 1;

          return {
            results: data
          };
        },
        cache: true
      },
      escapeMarkup: function (markup) { return markup; },
      minimumInputLength: 1,
    });

    // BAD PRACTICE: Make the entire { ajax: ...} block as a global variable,
    // then use it both here and on your original $ajax.select2(...) call.

});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Fullcalendar V4:如何将从ajax接收的json解析为事件列表

来自分类Dev

如何在select2 v4上使用dropdownadapter添加全选

来自分类Dev

如何在select2 v4上使用dropdownadapter添加全选

来自分类Dev

防止使用select2插件(v4)重新加载数据

来自分类Dev

jqGrid中的Select2 v4编辑模态窗口问题

来自分类Dev

jqGrid中的Select2 v4编辑模态窗口问题

来自分类Dev

Select2 v4 .val() 不维护数据对象中元素的顺序

来自分类Dev

select2 v4 dataAdapter.query 未触发

来自分类Dev

如何从.select2()Ajax调用内部获取<select>的data属性以供select2使用?

来自分类Dev

select2 4.0 AJAX预填充如何?

来自分类Dev

使用功能中的数据源(动态数据源)-Select2 v4

来自分类Dev

Select2 v4:从Excel工作表粘贴时在多选中选择选项

来自分类Dev

如何使用select2初始化默认值并触发ajax请求(select2:select)?

来自分类Dev

Web API 2 Odata V4 PATCH返回404

来自分类常见问题

react-router(v4)如何返回?

来自分类Dev

如何使用Bower安装Bootstrap v4 alpha?

来自分类Dev

Delphi7 TeeChart v4图例-如何滚动?

来自分类Dev

如何在12.04上安装MonoDevelop v4?

来自分类Dev

如何使用Facebook v4结识所有朋友

来自分类Dev

如何使用PHP SDK v4获取/ me / feed

来自分类Dev

如何使用odatajs读取OData v4端点?

来自分类Dev

如何在Go中验证UUID v4?

来自分类Dev

如何在pine脚本V4上绘制虚线?

来自分类Dev

我如何从v4 Bot返回打字活动

来自分类Dev

如何通过GitHub API V4搜索特定页面

来自分类Dev

如何在12.04上安装MonoDevelop v4?

来自分类Dev

如何获取Highcharts v4中的hoveredPoints列表?

来自分类Dev

如何在v4之前的bash上使用globstar

来自分类Dev

如何包装React Router v4的NavLink组件?

Related 相关文章

热门标签

归档