当前位置: 首页 > 知识库问答 >
问题:

向使用AJAX的jQuery Select2控件动态添加项

左丘季
2023-03-14

我有一个jQuery Select2控件,它使用AJAX填充:

<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控件,以便以编程方式将其添加回来?或任何其他解决方案...

编辑我发现另一个问题,说明如何使用.select2(“destroy”)删除select2元素。这是可行的,但在我看来,是次优的。我更希望能够添加选项,而不是破坏和重新创建select2。

共有1个答案

蓟和煦
2023-03-14

从select2 v4开始,这要容易得多。您可以创建一个新选项,并将其直接追加到select元素。请参阅我的代码页或下面的示例:

$(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>
 类似资料:
  • 问题内容: 我有一个使用AJAX填充的jQuery Select2控件: AJAX链接到可能选项的数据库,如您所见,需要输入两个字符。 问题是,如果数据库中不存在选项,则用户可以使用对话框来添加新选项。从该对话框返回后,我尝试: 但这是行不通的。相同的确切代码适用于非AJAX Select2盒。我尝试了各种替代方法,例如使用,但它不起作用。 我什至尝试完全删除Select2控件。但是,仅删除原始的

  • 我对java和javafx很陌生,有一个我无法解决的问题。我需要将新的自定义控件动态添加到 javafx 场景中。此外,我需要主控件和添加的控件之间的交互。我已经在网上找到了一些有用的信息,但无法将它们放在一起。 所以我举了一个小例子来解释: 主要类别: 主fxml: 及其控制器: 现在要动态添加的控件: 其影响: 和控制器: 用法是:应将fxml2添加到fxml1的hbox中。然后在fxml1中

  • 问题内容: 我有以下非常简单的代码 和背后的代码 我的问题在于,文字控件只能添加一次。我曾搜索过Google和博客网站(以及书籍),但没有任何运气。我想念什么? 问题答案: 在asp.net中,每次回发都会自动生成ASPX文件中的控件。您创建的控件不在ASPX代码中,因此框架不会为您创建它们。第一次执行Button1_Click方法时,您会向页面添加一个额外的控件。第二次执行Button1_Cli

  • 本文向大家介绍ASP.NET动态添加用户控件的方法,包括了ASP.NET动态添加用户控件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了ASP.NET动态添加用户控件的方法。分享给大家供大家参考。具体实现方法如下: 为了让用户控件能ASP.NET页面实现动态添加,首先写一个接口IGetUCable,这个接口有一个函数,返回对象类型是UserControl. 有了接口之后,需要创建用户

  • 问题内容: 我有一个空的JTable,绝对没有。我需要以某种方式动态生成其表列。我尝试使用的代码的简化版本: 但是我得到了 线程“ AWT-EventQueue-0”中的异常java.lang.ArrayIndexOutOfBoundsException:0> = 0 我究竟做错了什么? 如果有帮助,这是完整的堆栈跟踪: 问题答案: 我认为您需要将列添加到表的数据模型及其列模型中。当数据模型更改时

  • 我有一个窗口窗体有一个按钮,当按钮被点击时,它动态生成控件,也有一个按钮被添加,这样它就会删除在行的控件,意味着在按钮旁边,当按钮被点击时,一行控件将被删除。我的代码是 我的错误是什么,但问题是它dosnt删除所有的控件,它留下控件,我不知道什么问题,我的代码简单容易,但我不知道哪里缺乏