使用Chosen插件更改选择中的选择

时间:2012-01-23 23:29:47

标签: javascript jquery select jquery-chosen

我正在尝试使用Chosen插件更改select中当前选择的选项。

documentation涵盖更新列表,并在选择选项时触发事件,但在外部更改当前选定的值时没有(我可以看到)。

我制作了一个jsFiddle to demonstrate the code和我试图改变选择的方法:

$('button').click(function() {
    $('select').val(2);
    $('select').chosen().val(2);
    $('select').chosen().select(2);
});

4 个答案:

答案 0 :(得分:198)

来自docs中的“动态更新动态选择”部分:您需要在字段上触发“已选择:已更新”事件

$(document).ready(function() {

    $('select').chosen();

    $('button').click(function() {
        $('select').val(2);
        $('select').trigger("chosen:updated");
    });

});

注意:1.0之前的版本使用以下内容:

$('select').trigger("liszt:updated");

答案 1 :(得分:30)

我的答案很晚,但我想补充上述所有答案中遗漏的一些信息。

1)如果要在所选的选择中选择单个值。

$('#select-id').val("22").trigger('chosen:updated');

2)如果您使用多个选择的选择,那么您可能需要一次设置多个值。

$('#documents').val(["22", "25", "27"]).trigger('chosen:updated');

从以下链接收集的信息:
1)Chosen Docs
2)Chosen Github Discussion

答案 2 :(得分:1)

有时您必须删除当前选项才能操纵所选选项。

以下是如何设置选项的示例:

<select id="mySelectId" class="chosen-select" multiple="multiple">
  <option value=""></option>
  <option value="Argentina">Argentina</option>
  <option value="Germany">Germany</option>
  <option value="Greece">Greece</option>
  <option value="Japan">Japan</option>
  <option value="Thailand">Thailand</option>
</select>

<script>
activateChosen($('body'));
selectChosenOptions($('#mySelectId'), ['Argentina', 'Germany']);

function activateChosen($container, param) {
    param = param || {};
    $container.find('.chosen-select:visible').chosen(param);
    $container.find('.chosen-select').trigger("chosen:updated");
}

function selectChosenOptions($select, values) {
    $select.val(null);                                  //delete current options
    $select.val(values);                                //add new options
    $select.trigger('chosen:updated');
}
</script>

JSFiddle(包括如何附加选项): https://jsfiddle.net/tbaf0r38/30/

答案 3 :(得分:0)

如果选择的类型为多个,并且/或者如果要逐个删除已选择的项目,则可以直接在下拉列表项中使用以下内容:

jQuery("body").on("click", ".result-selected", function() {
    var locID = jQuery(this).attr('class').split('__').pop();
    // I have a class name: class="result-selected locvalue__209"
    var arrayCurrent = jQuery('#searchlocation').val();
    var index = arrayCurrent.indexOf(locID);
    if (index > -1) {
        arrayCurrent.splice(index, 1);
    }
    jQuery('#searchlocation').val(arrayCurrent).trigger('chosen:updated');
});