【问题标题】:select2 initialize with selected value on postbackselect2 在回发时使用选定的值初始化
【发布时间】:2015-05-11 14:36:32
【问题描述】:

我正在使用 ajax get 来填充 select2 单选中的值。

select2 是这样初始化的(jQuery):

    $("#domain").select2({
    placeholder: "Placeholder text",
    allowClear: true,
    multiple: false,
    ajax: {
        url: "/json/domain",
        dataType: "json",
        data: function(term, page) {
            return {
                q: term,
            };
        },
        results: function(data, page) {
            return data;
        }
    }

这是响应示例:

{"results":[{"id":"1234","text":"Name"}]}

一旦选择了一个值,select2 就会使用 id 更新一个隐藏的输入,并在一个跨度中显示“名称”。

select2 是 POST 的一部分,它根据所选值请求一堆数据。

所以在回发时,选定的值“Name”自然会从 DOM 中消失(而“id”则保留在隐藏的输入中)。

有什么方法可以在 postback 后用 pre-submit 选择的值初始化 select2(显示占位符 pre-postback)?

在 SO 和其他地方环顾四周,我尝试过这样的事情:

    $("#domain").select2({
    placeholder: "Placeholder text",
    allowClear: true,
    multiple: false,
    ajax: {
        url: "/json/domain",
        dataType: "json",
        data: function(term, page) {
            return {
                q: term
            };
        },
        results: function(data, page) {
            return {results: data};
        }               
    },
    initSelection: function(element, callback) {
        var id = $('#domain').val();
        if(id !== "") {
            $.ajax("/json/domain", {
                dataType: "json"
            }).done(function(data) {
                callback(function(data) { callback(data); });
            });
        }
    }
});

这会初始化但返回“未定义”。我猜是因为数据没有传递给 initSelection...

任何指向正确方向的指针都将不胜感激。

【问题讨论】:

    标签: jquery ajax select initialization


    【解决方案1】:

    如果我错了,请纠正我,但 initSelection 是 Select2 3.5.2 选项。

    在 Select2 4.0 中

    这现在由当前方法中的数据适配器处理,它 允许 Select2 将当前选择的值转换为数据 可以显示的对象。

    【讨论】:

      【解决方案2】:

      一切都很好,除了这个

      initSelection: function(element, callback) {
          var id = $('#domain').val();
          if(id !== "") {
              $.ajax("/json/domain", {
                  dataType: "json"
              }).done(function(data) {
                  callback(function(data) { callback(data); });
              });
          }
      }
      

      不应该吗

      initSelection: function(element, callback) {
          var id = $('#domain').val();
          if(id !== "") {
              $.ajax("/json/domain", {
                  dataType: "json"
              }).done(function(data) {
                  callback(data); // here
              });
          }
      }
      

      只要data格式如下

      [{id: 'this', text: 'this'}]
      

      【讨论】:

      • 这再次在输入中返回undefined(也在初始页面加载时,而不是在提交后)。 ajax 仍然可以正常工作并以正确的格式返回数据。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-07
      • 1970-01-01
      • 2017-05-21
      • 2017-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多