如何使用jQuery重置jquery选择的选项?


74

我尝试了很多事情,但似乎没有任何效果。

我正在使用jQuery和Chosen插件。

我尝试过的方法:

var select = jQuery('#autoship_option');

select.val(jQuery('options:first', select).val());

jQuery('#autoship_option').val('');

jQuery('#autoship_option').text('');

jQuery('#autoship_option').empty('');

jQuery("#autoship_option option[value='']").attr('selected', true);

选择后,它始终显示“活动自动装载”选项。我似乎无法清除选择。

这是选择框:

<select id="autoship_option" data-placeholder="Choose Option..." 
style="width: 175px;" class="chzn-select">
    <option value=""></option>
    <option value="active">Active Autoship</option>
</select>

有人熟悉“选择”并且能够清除一个选项的选择框吗?(将来它将有更多选择。


格式正确的问题。谢谢提问。
普雷盖斯(Prageeth)Godage 2013年

请参阅我的答案在我自己的问题,它的工作对我来说: - stackoverflow.com/questions/21191111/...
苏德赫Kesharwani

Answers:


176

select元素的值设置为空字符串正确的方法。但是,这只会更新根select元素。自定义chosen元素不知道根select已更新。

为了通知chosenselect已被修改,你必须触发chosen:updated

$('#autoship_option').val('').trigger('chosen:updated');

或者,如果不确定第一个选项是否为空字符串,请使用以下命令:

$('#autoship_option')
    .find('option:first-child').prop('selected', true)
    .end().trigger('chosen:updated');

在此处阅读文档(找到标题为“动态更新所选的部分” )。


PS选择的旧版本使用的事件稍有不同:

$('#autoship_option').val('').trigger('liszt:updated');

那就像一个魅力。我有种选择的感觉,我想念一些东西。非常感谢你。:)
詹姆斯·威尔逊

啊,为什么在文档中没有(或者我只是想念它?)谢谢。
technomaologic

@technomaologic-肯定在文档中。只需在该页面上搜索“动态选择更新”即可
约瑟夫·席尔伯

2
@JosephSilber如果您想将此更改添加到答案中以使所有信息保持最新状态,则看起来好像选择了一项更改,因为此更改位于顶部。.trigger("chosen:updated"); Harvesthq.github.io/chosen-
詹姆斯·威尔逊

5
我认为最好这样做:.find('option').removeAttr('selected').end().trigger('chosen:updated')
cherouvim 2014年

12

第一个选项应满足:http : //jsfiddle.net/sFCg3/

jQuery('#autoship_option').val('');

但是您必须确保要在诸如click按钮或ready在jsfiddle之或文档之类代码。

还要确保选项标签上始终有一个value属性。如果不是,某些浏览器总是在val()

编辑:
现在您已经澄清了选择的插件的使用,您必须调用

$("#autoship_option").trigger("liszt:updated");

更改其值以更新接口之后。

http://harvesthq.github.com/chosen/


第一个选项不起作用。我猜是因为选择插件控制了。
詹姆斯·威尔逊

感谢您编辑答案使其适用。我在原始帖子中确实提到过它是针对jQuery和Chosen插件的。
詹姆斯·威尔逊

3
“还要确保选项标签上始终有一个value属性。如果没有,某些浏览器在val()上总是返回空。” 为此+1 !!!
sskoko 2013年


5

如果使用chosenjQuery插件,请使用以下命令刷新或清除下拉菜单的内容:

$('#dropdown_id').empty().append($('< option>'))

dropdown_id.chosen().trigger("chosen:updated")

chosen:updated事件re-build本身将基于更新的内容。



4

我用这个:

$('idSelect').val([]);

在IE,Safari和Firefox上进行了测试


先生,您救了我的命
Isaac

2

这比查找更有效。

$('select').children('option').first().prop('selected', true)
$('select').trigger("chosen:updated");

2
var config = {
      '.chosen-select'           : {},
      '.chosen-select-deselect'  : {allow_single_deselect:true},
      '.chosen-select-no-single' : {disable_search_threshold:10},
      '.chosen-select-no-results': {no_results_text:'Oops, nothing found!'},
      '.chosen-select-width'     : {width:"95%"}
    }
    for (var selector in config) {
      $(selector).chosen(config[selector]);
    }

使用上述配置并申请class='chosen-select-deselect'手动取消选择并将值设置为空

或者如果您想在所有组合中取消选择选项,则应用如下配置

var config = {
  '.chosen-select'           : {allow_single_deselect:true},//Remove if you do not need X button in combo
  '.chosen-select-deselect'  : {allow_single_deselect:true},
  '.chosen-select-no-single' : {disable_search_threshold:10},
  '.chosen-select-no-results': {no_results_text:'Oops, nothing found!'},
  '.chosen-select-width'     : {width:"95%"}
}
for (var selector in config) {
  $(selector).chosen(config[selector]);
}


1
jQuery("#autoship_option option:first").attr('selected', true);

这不是很好。可能是因为选择的插件获得了控制权。
詹姆斯·威尔逊

这没有插件..好东西。通常,您想重置为第一个选项,这就是它的作用(并且不会清除下拉列表中的默认文本)。
菲利普·布兰登·霍尔姆斯

1

我不确定这是否适用于所选的旧版本,但现在在当前版本(v1.4.1)中,他们可以选择 $('#autoship_option').chosen({ allow_single_deselect:true });它将在所选名称旁边添加一个“ x”图标。使用“ x”清除“选择”领域。

PS:请确保按照selected.css在正确的位置放置了“ chosen-sprite.png”,以便显示图标。



0

我认为您必须为选择分配一个新值,因此,如果您想清除选择,则可能希望将其分配给值=“”的选择。我认为您可以通过将值分配给空字符串来获取它.val('')


0

HTML:

<select id="autoship_option" data-placeholder="Choose Option..." 
        style="width: 175px;" class="chzn-select">
    <option value=""></option>
    <option value="active">Active Autoship</option>
</select>
<button id="rs">Click to reset</button>

JS:

$('#rs').on('click', function(){
    $('autoship_option').find('option:selected').removeAttr('selected');
});

小提琴:http : //jsfiddle.net/Z8nE8/


0

您可以尝试此操作以重置(空)下拉菜单

 $("#autoship_option").click(function(){
            $('#autoship_option').empty(); //remove all child nodes
            var newOption = $('<option value=""></option>');
            $('#autoship_option').append(newOption);
            $('#autoship_option').trigger("chosen:updated");
        });

0

新的选择库不使用liszt。我使用了以下内容:

document.getElementById('autoship_option').selectedIndex = 0;
$("#autoship_option").trigger("chosen:updated");

0

如果无论其值如何都需要选择第一个选项(有时第一个选项值不为空),请使用以下方法:

$('#autoship_option').val($('#autoship_option option:first-child').val()).trigger("liszt:updated");

它将获取第一个选项的值并将其设置为选中状态,然后触发选择的更新。因此,它的工作方式类似于重置为列表中的第一个选项。


0

确实我有相同的要求。但是通过使用jquery只设置空字符串来重置下拉列表将不起作用。您还应该触发更新。

Html:
<select class='chosen-control'>
<option>1<option>
<option>2<option>
<option>3<option>
</select>

Jquery:
$('.chosen-control').val('').trigger('liszt:updated');

有时根据您使用的所选控件的版本,您可能需要使用以下语法。

$('.chosen-control').val('').trigger("chosen:updated");

参考:如何重置Jquery选择的选择选项



0

像这样简单的添加触发器更改:

$('#selectId').val('').trigger('change');

0

从上述解决方案中,没有任何一项对我有用。这工作:

$('#client_filter').html(' '); //this worked

这是为什么?:)

$.ajax({ 
        type: 'POST', 
        url: xyz_ajax,
        dataType: "json",
        data : { csrfmiddlewaretoken: csrftoken,
                instancess : selected_instances }, 
        success: function(response) { 
            //clear the client DD       
            $('#client_filter').val('').trigger('change') ; //not working
            $('#client_filter').val('').trigger('chosen:updated') ; //not working
            $('#client_filter').val('').trigger('liszt:updated') ; //not working
             $('#client_filter').html(' '); //this worked
             jQuery.each(response, function(index, item) {
                  $('#client_filter').append('<option value="'+item.id+'">' + item.text + '</option>');
                });                 
           $('#client_filter').trigger("chosen:updated");
        }
      });
     } 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.