在 'destroy' 之后使用新选项初始化后 Select2 AJAX 调用没有发生
Selec2 AJAX call not happening after initializing with new options after 'destroy'
我 运行 遇到一个问题,我需要使用 Select2 插件将 <select>
从常规列表更改为 AJAX 结果。我设法更改 <select>
上的选项,但如果我尝试搜索,AJAX 调用永远不会发生。这是我的简化代码:
$(function() {
$('select').select2();
$('button').on('click', function() {
var options = $('select').data('select2').options.options;
console.log(options);
options.ajax = {
url: '/echo/json',
dataType: 'json',
delay: 250
};
$('select').data(options);
$('select').empty();
$('select').select2('destroy');
$('select').select2();
console.log($('select').data('select2').options.options);
});
});
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.5/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/select2/4.0.5/js/select2.full.min.js"></script>
<div>
<select style="width: 100px;">
<option value=""></option>
<option value="1">One</option>
<option value="2">Two</option>
</select>
<button>Refresh</button>
</div>
还尝试了一种不同的方法,将选项直接设置为 Select2,但没有成功:
$('select').empty();
$('select').select2('destroy');
$('select').select2(options);
在这两种情况下,选项中的 AJAX 对象在刷新后都存在。
任何应该更改以触发 AJAX 调用的建议都将受到赞赏。
您无法使用所有先前的实例选项重新初始化 select2。
你需要做这样的事情:
$(function() {
$('select').select2();
$('button').on('click', function() {
// extending incase there is some data-* options
var options = Object.assign({}, $('select').dataset, {
ajax: {
url: '/echo/json',
dataType: 'json',
delay: 250
}
});
$('select').empty();
$('select').select2('destroy');
$('select').select2(options);
});
});
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.5/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/select2/4.0.5/js/select2.full.min.js"></script>
<div>
<select style="width: 100px;">
<option value=""></option>
<option value="1">One</option>
<option value="2">Two</option>
</select>
<button>Refresh</button>
</div>
我 运行 遇到一个问题,我需要使用 Select2 插件将 <select>
从常规列表更改为 AJAX 结果。我设法更改 <select>
上的选项,但如果我尝试搜索,AJAX 调用永远不会发生。这是我的简化代码:
$(function() {
$('select').select2();
$('button').on('click', function() {
var options = $('select').data('select2').options.options;
console.log(options);
options.ajax = {
url: '/echo/json',
dataType: 'json',
delay: 250
};
$('select').data(options);
$('select').empty();
$('select').select2('destroy');
$('select').select2();
console.log($('select').data('select2').options.options);
});
});
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.5/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/select2/4.0.5/js/select2.full.min.js"></script>
<div>
<select style="width: 100px;">
<option value=""></option>
<option value="1">One</option>
<option value="2">Two</option>
</select>
<button>Refresh</button>
</div>
还尝试了一种不同的方法,将选项直接设置为 Select2,但没有成功:
$('select').empty();
$('select').select2('destroy');
$('select').select2(options);
在这两种情况下,选项中的 AJAX 对象在刷新后都存在。 任何应该更改以触发 AJAX 调用的建议都将受到赞赏。
您无法使用所有先前的实例选项重新初始化 select2。
你需要做这样的事情:
$(function() {
$('select').select2();
$('button').on('click', function() {
// extending incase there is some data-* options
var options = Object.assign({}, $('select').dataset, {
ajax: {
url: '/echo/json',
dataType: 'json',
delay: 250
}
});
$('select').empty();
$('select').select2('destroy');
$('select').select2(options);
});
});
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.5/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/select2/4.0.5/js/select2.full.min.js"></script>
<div>
<select style="width: 100px;">
<option value=""></option>
<option value="1">One</option>
<option value="2">Two</option>
</select>
<button>Refresh</button>
</div>