将项目动态添加到使用 AJAX 的 jQuery Select2 控件

2023-12-28

我有一个使用 AJAX 进行填充的 jQuery Select2 控件:

<input type="text" name="select2" id="select2" style='width:400px' value="999">

var initialSelection = { id: '999', text:"Some initial option"};

$("#select2").select2({
    placeholder: "Select Option",
    minimumInputLength: 2,
    ajax: { 
        url: "/servletToGetMyData",
        dataType: 'json',
        data: function (term, page) { return { term: term }; },
        results: function (data, page) {  return { results: data.results} }
    },
    initSelection : function(element, callback){ callback(initialSelection); },     
    escapeMarkup: function (m) { return m; }
}); 

AJAX 链接到可能选项的数据库,正如您所看到的,需要输入两个字符。

问题是,如果数据库中不存在该选项,用户可以使用对话框添加新选项。从该对话框返回后,我尝试:

var o = $("<option/>", {value: newID, text: newText});
$('#select2').append(o);
$('#select2 option[value="' + newID + '"]').prop('selected',true);
$('#select2').trigger('change');

但这不起作用。相同的代码适用于非 AJAX Select2 框。我尝试过各种替代方案,例如使用$('#select2').select2("val", newID);但它不起作用。

我什至尝试完全删除 Select2 控件。然而,$('#select2').remove()仅删除原始的 字段,但保留 Select2 控件。请注意,该页面有多个 Select2 控件,因此我无法对 Select2 控件使用类选择器,因为它会删除我需要的其他控件。

知道如何 a) 向使用 AJAX 的 Select2 控件动态添加选项;或者 b) 完全删除 Select2 控件,以便可以通过编程方式将其添加回来?或者任何其他解决方案...

Edit我发现另一个问题显示如何使用 .select2("destroy") 删除 select2 元素。这可行,但在我看来,这并不是最理想的。我更希望能够仅添加该选项,而不是销毁并重新创建 select2。


从 select2 v4 开始,这要容易得多。您可以创建一个new Option,并将其附加到select直接元素。看我的codepen http://codepen.io/alexweissman/pen/zremOV或下面的例子:

$(document).ready(function() {
    $("#state").select2({
      tags: true
    });
      
    $("#btn-add-state").on("click", function(){
      var newStateVal = $("#new-state").val();
      // Set the value, creating a new option if necessary
      if ($("#state").find("option[value=" + newStateVal + "]").length) {
        $("#state").val(newStateVal).trigger("change");
      } else { 
        // Create the DOM option that is pre-selected by default
        var newState = new Option(newStateVal, newStateVal, true, true);
        // Append it to the select
        $("#state").append(newState).trigger('change');
      } 
    });  
});
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.1/css/select2.min.css" rel="stylesheet"/>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.6/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.1/js/select2.min.js"></script>


<select id="state" class="js-example-basic-single" type="text" style="width:90%">
  <option value="AL">Alabama</option>
  <option value="WY">Wyoming</option>
</select>
<br>
<br>
<input id="new-state" type="text" />
<button type="button" id="btn-add-state">Set state value</button>

提示:尝试在文本框中输入现有值,例如“AL”或“WY”。然后尝试添加一些新值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将项目动态添加到使用 AJAX 的 jQuery Select2 控件 的相关文章

随机推荐

  • 无法根据 WSO2 API Manager 中的消息中介策略调用动态端点/URL

    我正在使用 APIM 3 1 0 我需要根据标头或请求参数重定向 API 我尝试过请求参数但无法调用不同的API 我已使用以下自定义中介策略并将其添加到测试 API 但无法调用不同的 URL 每次调用 API 时 即使我将操作值作为菜单传递
  • Fancybox 在 IE 中加载 iframe 时卡住

    我在使用 fancybox 的 IE 中的 iframe 中加载 PDF 时遇到问题 当我点击链接时 我会得到 gif 加载程序 并且它会永远旋转 控制台或页面或类似内容中没有错误 所有版本的 IE 都会出现此问题 所有其他浏览器都工作正常
  • 保持用户界面最新的最佳方法是什么?

    这个问题是我的问题的改进观察数据变化的不同方式 https stackoverflow com questions 3161392 different ways of observing data changes 我的 C 应用程序中仍然有
  • 如何隐藏ng网格中的列

    这是我的代码 索引 html
  • 配置 WiX 自动设置产品版本属性?

    目前 每当我构建包时 我都必须手动增加 P roduct wxs 文件中的 Version 属性 如下所示
  • 如何找到 JavaScript 数组中包含的最大数字?

    我有一个简单的 JavaScript 数组对象 其中包含一些数字 267 306 108 有没有一个函数可以找到这个数组中最大的数字 辞职来救援 http ejohn org blog fast javascript maxmin Arra
  • 在网站中存储用户上传的文件的最佳方式是什么?

    我正在尝试创建一个网站 需要在其中存储一些用户上传的文件 如一些个人资料图片 一些 xml 文件等 那么存储这些文件的最佳方式是什么 目前 我正在服务器上为每个注册的新用户创建一个新目录 并将每个用户的文件存储在各自的目录中 但有人告诉我这
  • Jersey、Guice 和 Hibernate - EntityManager 线程安全

    我在我的应用程序中以同样的方式使用了本教程 http www benmccann com hibernate with jpa annotations and guice http www benmccann com hibernate w
  • Font Awesome 5 使用 JS+SVG 版本时显示空方块

    尝试用 Font Awesome 图标替换列表项标签上的项目符号类型 但我得到一个空方块 ul list style none testitems line height 2em testitems before font family F
  • 在 OS X 终端中构建和运行 Monodevelop 解决方案

    我想从 OS X 终端构建并运行 Monodevelop 解决方案 执行此操作的适当工具 命令是什么 我尝试跑步mdtools build从包含的目录MySolution sln 这导致 bash mdtools command not f
  • 如何查找一个字段的值与另一字段的值匹配的所有文档

    我的文档中有两个字段 具有以下映射 field a type float field b type float 如何找到具有以下值的所有文档field a匹配的是field b 禁用脚本可以实现这一点吗 基本上你需要一个脚本来完成它 即使禁
  • C++ 类型名和内部类

    我尝试用谷歌搜索这个问题 但无法找到合适的答案 任何 C 大师都可以告诉我为什么 C 要求你声明 OuterClass
  • Kafka 到 Snowflake 连接问题

    我正在尝试从本地独立 Confluence Kafka 主题连接到 Snowflake 表 我正在使用以下连接器配置ksqldb CREATE SINK CONNECTOR snowflake sink WITH name snowflak
  • Eclipse 在调试 ctrl+shift+i 时丢失了检查快捷方式

    我正在尝试恢复快捷方式 但没有成功 有一个执行检查的快捷方式 只需单击 CTRL SHIFT I 但现在我已经没有这个功能了 它似乎消失了 有想法恢复它吗 谢谢 最后我想出了如何恢复这个命令 要到达此面板 您必须转到 Windows gt
  • 比较剪贴板中的 IDataObject

    我的 WPF 应用程序检查剪贴板上的数据 看看它是否可以使用该数据 因为我根据数据设置了一些按钮来启用 禁用 通过ICommand实现 这段代码被频繁调用 确定我的应用程序是否可以处理数据的工作有时可能非常重要 因此会导致我的应用程序随机
  • 在用户输入的数组中查找值

    我试图在用户之前输入过的数组中找到任何用户输入的值 我做了以下操作来查找数组中输入的值 但似乎不知道在哪里插入循环来查找用户输入的搜索值 好的 更新 我正在寻找一种方法来查找用户之前输入的数组中输入的值 如果符合逻辑的话是这样的 好的第二次
  • 面板上的 DrawToBitmap 为空白

    因此 我编写了一个类 它存储一些测试结果信息 然后是一个向用户显示该信息的控件 我想在此类上放置一个打印函数 以全页大小绘制控件并打印它 然而它总是显示空白 该代码将面板视为控件 因为它可能是其他类型的值 我想我一定缺少一些简单的东西 vo
  • 使用 Google Admin SDK 的服务帐户创建用户?

    文档对此有点不清楚 我真的可以这样做吗 到目前为止 我看到的唯一示例来自 Google 文档 该文档显示它使用 GoogleAuthorizationCodeFlow 类来获取授权 我见过一些使用服务帐户更新和检索用户列表的示例 但没有看到
  • 如何设计 Django 的文件选择器表单按钮的样式?

    我正在尝试设计我的 Django文件上传按钮 但由于它是通过表单处理的 并且没有在模板内的 HTML 中显式编写 所以我无法像其他输入类型按钮那样直接使用 HTML 和 CSS 对其进行样式设置 我尝试在我的 CSS 类中添加forms p
  • 将项目动态添加到使用 AJAX 的 jQuery Select2 控件

    我有一个使用 AJAX 进行填充的 jQuery Select2 控件