Заполните опции в optgroup в поле выбора, данные опций перезаписывают друг друга - PullRequest
0 голосов
/ 09 октября 2018

ОБНОВЛЕНИЕ: я изменил с

 $('select[name=productSelect]').setOptions(["All products|ALL", "Products visible to all|VISIBLETOALL=1"]);

на

 $('select[name=productSelect]').prepend(["All products|ALL", "Products visible to all|VISIBLETOALL=1"]);

И теперь я получаю эту ошибку:

error: TypeError: this.split is not a function.

и здесь я делю разделение:

setOptions: function (inOptions, forceEmpty) {
        return this.each(function () { ...

            $.each(options, function () { //Here the split
                parts = this.split('|', 2);
                if (parts.length === 1) parts.push(parts[0]);
                if (parts[0] === 'optgroup') html.push('<optgroup label="' + parts[1] + '">');
                else if (parts[0] === '/optgroup') html.push('</optgroup>');
                else html.push('<option value="' + parts[1] + '">' + ($this.hasClass('no-translate-children') ? parts[0] : translator.getTranslation(parts[0])) + '</option>');
            });
            $this.html(html.join('')).val(value);
            if(options.length < 2) $this.find('option').first().prop('selected', 'selected'); // if only one option -> select it
            if ($this.val() !== value) $this.trigger('change'); // if some value is not an option, value will be removed
            $this.trigger('elementChanged');
        });
    },

Я пишу функцию для установки опций в окне выбора, опции будут разделены в оптгруппах.До сих пор мне нужно было заполнить некоторые опции, но некоторые из них перезаписываются и не отображаются, например:

$('select[name=productSelect]').setOptions(["All products|ALL", "Products visible to all|VISIBLETOALL=1"]);

Не заполняется, я также не мог разделить их в optgroup, все заполненыварианты, заполняет без optgroup.Что я делаю не так?какой лучший способ установить параметры в optgroup?

это мой javascript:

setProductSelectOpt: function (AllianceUNID, PartnerUNID) {

        var productSelect = $('select[name=productSelect]').val();
        var alliances = $("[name$=productSelect]");
        dbService.dbLookup("main", "Alliances", 2, null).done(function (products) {
            alliances.setOptions(products, true);
        });

        var partners = $("[name$=productSelect]");
        if (products.alliances) {
            dbService.dbLookup("main", "PartnersAlliance", 3, products.alliances).done(function (products) {
                partners.setOptions(products, true);
            });
        } 

        $.when(partners, alliances).done(function(a,p){
            $('select[name=productSelect]').setOptions(["All products|ALL", "Products visible to all|VISIBLETOALL=1"]);
            $('select[name=productSelect] optgroup[label=Alliances]').setOptions(a);
            $('select[name=productSelect] optgroup[label=Partners]').setOptions(p);
        });
}, 

и мой html:

<div class="span4 internal">
        <label>Product selection
            <select name="productSelect">
                    <option value="">-
                    <optgroup label="" name="">
                    </optgroup>
                    <optgroup label="Alliances">
                    </optgroup>
                    <optgroup label="Partners">
                    </optgroup>
            </select>
        </label>
    </div>

Любое предложение будет очень ценным!Спасибо

1 Ответ

0 голосов
/ 10 октября 2018

Исправлено: это было мое решение:

setProductSelectOpt: function () {
        var alliances = dbService.dbLookup("main", "vwAlliances", 2, null),
        partners = dbService.dbLookup("main", "vwPartnersByAlliance", 3, products.alliances);
        $.when(alliances, partners).done(function(a,p){
            var data = ["All products|ALL", "Products visible to all|VISIBLETOALL=1"];
            data.push("optgroup|Alliance");
            data.pushAll(a[0]);
            data.push("/optgroup|");
            data.push("optgroup|Partners");
            data.pushAll(p[0]);
            data.push("/optgroup|");
            $('select[name=productSelect]').setOptions(data);
        });
    },
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...