刷新JQuery UI Multiselect小部件

时间:2012-06-21 09:16:19

标签: jquery-ui

我正在尝试使用这个漂亮的小部件:http://quasipartikel.at/multiselect_next/

我在同一页面中有两个这个Widget,当我在第一个中选择或取消选择项目时,我正在尝试刷新第二个。

例如,在开始时,我只有这个:

<select id="crc" class="multiselect" multiple="multiple">

</select>

然后,在select和deselect事件中,我正在创建更多节点并将它们添加到此(它可以工作,它创建这样的东西:

    <select id="crc" class="multiselect" multiple="multiple">
        <option>test1</option>
        <option>test2</option>
    </select>

问题是我在添加新选项后无法刷新第二个小部件。 我想了一个有类似问题的有用帖子并尝试了这个:

$("#crc").multiselect("destroy").multiselect();

但它没有用,有没有人有想法?

1 个答案:

答案 0 :(得分:1)

我有完全相同的问题。这对我有用:

要修复ui.multiselect的析构函数问题,请在destroy函数内部进行以下更改:

destroy: function() {
    this.element.show();
    this.container.remove();

    if ($.Widget === undefined)
        $.widget.prototype.destroy.apply(this, arguments);
    else {
        $.Widget.prototype.destroy.apply(this, arguments);
        return this;
    }
}

旧版本是:

destroy: function() {
    this.element.show();
    this.container.remove(); 
    $.widget.prototype.destroy.apply(this, arguments);
}

这种更改的原因是jQuery 1.8中引入了一个新的$ .Widget。我还进行了以下更改/添加,以便它与IE9兼容,并且还提供了获取selectedTexts的功能。

// get all selected values in an array
selectedValues: function() {
    return $.map( this.element.find('option[selected]=selected'), function(item,i) { return $(item).val(); });
},
selectedTexts: function () {
    return $.map(this.element.find('option[selected]=selected'), function (item, i) { return $(item).html(); });
}