franipfp
franipfp

Reputation: 160

How to get FilteringSelect options and add a new one with dojo

I have a FilteringSelect in a form and I want to get it options in order to do an alphabetical insertion of a new option.

The FilteringSelect element is:

<select name="inv_ext" id="inv_ext" data-dojo-type="dijit.form.FilteringSelect">
    <option class="opt_inv_ext" value="1">Aaaaa, Aaa</option>
    <option class="opt_inv_ext" value="2">Ccccc, Ccc</option>
</select>

And the Javascript code to get and proccess each option is:

dojo.query(".opt_inv_ext").forEach(function(opt, i, nodelist){
    ...
}

The goal is to insert the following node:

<option class="opt_inv_ext" value="3">Bbbbb, Bbb</option>

between the two existing ones using the label as the comparison value not the value attribute.

Any idea? Thanks in advance and sorry my english!

Upvotes: 1

Views: 6150

Answers (2)

user4535106
user4535106

Reputation: 1

I resolved this problem as follows:

dijit.byId("select_id").store.root.add(dojo.create("option",{ value: "some", innerHTML: "label of option"}));

To remove the existing elements did just that:

var size = dijit.byId("select_id").store.root.removeChild.length;    
for(var i=size; i>=0; i--){
    dijit.byId("select_id").store.root.removeChild(dijit.byId("select_id").store.root.children[size-1]);
}

Upvotes: -1

Philippe
Philippe

Reputation: 6828

It's easy to do if you use a store to back your list. I assume you use dojo 1.6>. Here is an example :

-In your HTML :

<input id="inv_ext">

-In javascript :

var store = new dojo.store.Memory({
    data : [
        { type : 'options', value : 1, text : 'Aaaaa, Aaa' },
        { type : 'options', value : 2, text : 'Ccccc, Ccc' },
    ]
});

dojo.ready(function(){

        var filteringSelect = new dijit.form.FilteringSelect({
                id: "inv_ext",
                name: "inv_ext",
                store: store,
                searchAttr : 'text',
                query : {
                    type : 'options'
                },
                fetchProperties : {
                    sort : [ { attribute : "text" } ] 
                }
        }, "inv_ext");

        store.put({ type : 'options', value : 3, text : 'Bbbbb, Bbb' });
});

Upvotes: 5

Related Questions