Bum*_*tle 46 ajax jquery jquery-select2
我有一个使用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; }
});
Run Code Online (Sandbox Code Playgroud)
AJAX链接到可能选项的数据库,您可以看到需要两个输入字符.
问题是如果数据库中不存在该选项,则用户可以使用对话框添加新选项.从该对话框返回后,我尝试:
var o = $("<option/>", {value: newID, text: newText});
$('#select2').append(o);
$('#select2 option[value="' + newID + '"]').prop('selected',true);
$('#select2').trigger('change');
Run Code Online (Sandbox Code Playgroud)
但它不起作用.完全相同的代码适用于非AJAX Select2框.我尝试了各种替代方案,比如使用,$('#select2').select2("val", newID);但它不起作用.
我甚至试图完全删除Select2控件.但是,$('#select2').remove()仅删除原始的<input>字段,但使Select2控件保持不变.请注意,该页面有多个Select2控件,因此我不能使用Select2控件的类选择器,因为它将删除我需要的其他控件.
知道如何a)动态地向使用AJAX的Select2控件添加选项; 或b)完全删除Select2控件,以便以编程方式添加回来?或任何其他解决方案......
编辑 我发现另一个问题,显示如何使用.select2("destroy")删除select2元素.这是有效的,但在我看来,它是次优的.我更愿意只添加选项而不是销毁和重新创建select2.
ale*_*exw 42
从select2 v4开始,这样做要容易得多.您可以创建一个new Option,并select直接将其附加到元素.请参阅我的codepen或以下示例:
$(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');
}
});
});Run Code Online (Sandbox Code Playgroud)
<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>Run Code Online (Sandbox Code Playgroud)
提示:尝试在文本框中输入现有值,如"AL"或"WY".然后尝试添加一些新值.
Bum*_*tle 30
这提供了一个简单的解决方案: 使用AJAX插入后在Select2中设置数据
$("#select2").select2('data', {id: newID, text: newText});
Run Code Online (Sandbox Code Playgroud)
Sru*_*Suk 20
如果是Select2版本4+
它改变了语法,你需要像这样写:
// clear all option
$('#select_with_blank_data').html('').select2({data: [{id: '', text: ''}]});
// clear and add new option
$("#select_with_data").html('').select2({data: [
{id: '', text: ''},
{id: '1', text: 'Facebook'},
{id: '2', text: 'Youtube'},
{id: '3', text: 'Instagram'},
{id: '4', text: 'Pinterest'}]});
// append option
$("#select_with_data").append('<option value="5">Twitter</option>');
$("#select_with_data").val('5');
$("#select_with_data").trigger('change');
Run Code Online (Sandbox Code Playgroud)
Dig*_*jay 17
在Select2 4.0.2中
$("#yourId").append("<option value='"+item+"' selected>"+item+"</option>");
$('#yourId').trigger('change');
Run Code Online (Sandbox Code Playgroud)
Sun*_*eel 10
我已经通过此链接http://www.bootply.com/122726解决了问题 .希望能帮助你
在select2 jquery中添加选项,并使用已创建的链接ID(#addNew)绑定您的ajax调用,以获取后端的新选项.和代码
$.getScript('http://ivaynberg.github.io/select2/select2-3.4.5/select2.js',function(){
$("#mySel").select2({
width:'240px',
allowClear:true,
formatNoMatches: function(term) {
/* customize the no matches output */
return "<input class='form-control' id='newTerm' value='"+term+"'><a href='#' id='addNew' class='btn btn-default'>Create</a>"
}
})
.parent().find('.select2-with-searchbox').on('click','#addNew',function(){
/* add the new term */
var newTerm = $('#newTerm').val();
//alert('adding:'+newTerm);
$('<option>'+newTerm+'</option>').appendTo('#mySel');
$('#mySel').select2('val',newTerm); // select the new term
$("#mySel").select2('close'); // close the dropdown
})
});
<div class="container">
<h3>Select2 - Add new term when no search matches</h3>
<select id="mySel">
<option>One</option>
<option>Two</option>
<option>Three</option>
<option>Four</option>
<option>Five</option>
<option>Six</option>
<option>Twenty Four</option>
</select>
<br>
<br>
</div>
Run Code Online (Sandbox Code Playgroud)
小智 5
延伸到Bumptious Q Bangwhistle的答案:
$('#select2').append($('<option>', {
value: item,
text : item
})).select2();
Run Code Online (Sandbox Code Playgroud)
这会将新选项添加到<select>标记中,然后让select2重新渲染它.
我就是这样做的,它对我来说就像一种魅力。
var data = [{ id: 0, text: 'enhancement' }, { id: 1, text: 'bug' }, { id: 2,
text: 'duplicate' }, { id: 3, text: 'invalid' }, { id: 4, text: 'wontfix' }];
$(".js-example-data-array").select2({
data: data
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
130076 次 |
| 最近记录: |