【发布时间】:2019-05-26 05:09:06
【问题描述】:
我有我的 ChosenJS 多选输入,我通过 AJAX 动态获取选项:
$("#offer_tags").chosen({
max_selected_options: 30,
max_shown_results: 30,
});
$("#offer_tags_chosen input").autocomplete({
minLength: 3,
source: function( request, response ) {
$.ajax({
url: "/common/offer_tags?search="+request.term,
dataType: "json",
beforeSend: function(){}
}).done(function( data ) {
response(
$('#offer_tags_chosen ul.chosen-results').each(function () {
console.log(this);
}),
$('#offer_tags').append('<option>' + request.term + '</option>'),
$.map( data, function( item ) {
$('#offer_tags').append('<option value='+ item.id +'>' + item.name + '</option>');
})
);
$("#offer_tags").trigger("chosen:updated");
});
}
});
目前看起来一切正常,但是我想在添加新选项之前删除未选择的选项。
到目前为止,我的想法是访问ul.chosen-results,然后删除所有li.active-results
有了这段代码
$('#offer_tags_chosen ul.chosen-results').each(function () {
console.log(this);
})
我可以在我的控制台中获得ul.chosen-results:
<ul class="chosen-results">
<li class="active-result" data-option-array-index="0" style="">myvalue</li>
<li class="active-result" data-option-array-index="1" style="">othervalue</li>
<li class="active-result" data-option-array-index="2" style="">thirdvalue</li>
</ul>
但是,当我尝试通过以下方式访问 children 时:
$('#offer_tags_chosen ul.chosen-results').each(function () {
console.log($(this).children());
})
它给了我这个:
w.fn.init [li.no-results, prevObject: w.fn.init(1)]
0: li.no-results
length: 1
prevObject: w.fn.init [ul.chosen-results]
__proto__: Object(0)
请问我做错了吗?如何在附加新选项之前删除未选择的选项?我需要保留选定的选项 - 不删除。
更新
我的 HTML 如下所示:
<div class="chosen-container chosen-container-multi" style="width: 936px;"
title="" id="offer_tags_chosen">
<ul class="chosen-choices">
<li class="search-field">
<input type="text" value="Please, select (multiple allowed)"
class="default ui-autocomplete-input" autocomplete="off"
style="width: 215.387px;">
</li>
</ul>
<div class="chosen-drop">
<ul class="chosen-results">
<li class="active-result" data-option-array-index="0" style="">myvalue</li>
<li class="active-result" data-option-array-index="1" style="">othervalue</li>
<li class="active-result" data-option-array-index="2" style="">thirdvalue</li>
</ul>
</div>
</div>
console.log($(this).children().get()); 给我:
[li.no-results]
0: li.no-results
length: 1
__proto__: Array(0)
【问题讨论】:
-
请用相关的html更新你的代码(你只提供了
ulhtml,还不够,#offer_tags_chosendiv在哪里?),如果你能做一个sn-p就好了一个可以帮助您更轻松。 -
@tcj 请看我上面的更新。我会检查我是否也可以添加一些 sn-p。
-
您尝试删除所有具有 'active-result' 类的 li ?
-
@Shree 是的,我想删除
li.active-result,但保留已选择的选项 - 具有类result-selected。对于每个 AJAX 请求,我可以获得新的选项列表并始终保持选中状态,但删除未选中的选项。 -
你可以试试 console.log($(this).children().get());
标签: jquery jquery-chosen