Dojo: How to disable a dijit.form.FilteringSelect

2019-08-18 02:27发布

问题:

I am trying to disable option items in a dijit/Form/FilteringSelect. Here is code

 <select id="filtSelect" dojoType="dijit.form.FilteringSelect">  
        <option disabled="disabled">Select</option>  
        <option value="1">One</option>  
        <option value="2">Two</option>  
        <option value="3">Three</option>  
  </select>

Please help me.

回答1:

You can do it this way: ( Vers. 1.9 )

<select data-dojo-type="dijit/form/" id="count" name="count">
    <option disabled="disabled">Select</option>  
    <option value="1">One</option>  
    <option value="2">Two</option>  
    <option value="3">Three</option>
</select>

Here's the full fiddle for my Example above(Edited by Thomas Upton): http://jsfiddle.net/tupton/266C4/

and here the reference from dojo: http://dojotoolkit.org/reference-guide/1.9/dijit/form/FilteringSelect.html?highlight=filteringselect

In the 1.6 Vers it must look like:

<script>
  dojo.require("dijit.form.FilteringSelect");
</script>

<body class="claro">
 <select dojoType="dijit.form.FilteringSelect" id="fruit" name="fruit">
        <option value="AP" disabled>
            Apples
        </option>
        <option value="OR" selected>
            Oranges
        </option>
        <option value="PE">
            Pears
        </option>
    </select>
</body>

Here the fiddle for this Version: http://jsfiddle.net/Q4zw6/

It's important that you load the instance of dijit.form.filteringSelect to use it.

Regards, Miriam



回答2:

I don't believe you can disable options with dijit/form/FilteringSelect because it is store-based and is supposed to let a user enter any text.

There is a property called displayedValue, which you can use to set whatever you want. However, with FilteringSelect, any text that isn't an option is marked as erroneous input, as seen by the following code and this jsfiddle.

<select data-dojo-type="dijit/form/FilteringSelect" data-dojo-props="displayedValue: 'Select'" id="count" name="count">
        <option value="1">One</option>  
        <option value="2">Two</option>  
        <option value="3">Three</option>
</select>

You could use a dijit/form/ComboBox in exactly the same manner; the difference between FilteringSelect and ComboBox is that the latter allows any input. See the documentation for more information.



回答3:

The issue is that FilteringSelect relies on dojo data store, as others have pointed out. So if you don't create that manually, it will happen behind the scenes and you just won't know how to reference it. But on second thought, looking at the API I notice FilteringSelect has a property named store.

So, you either need to create the data store yourself & initialize the FilteringSelect with it (http://dojotoolkit.org/reference-guide/1.9/dijit/form/FilteringSelect.html) or retrieve it by using dijit's byId and then accessing the "store" property.

Then, manipulate that data store. Maybe store a temporary copy before you remove the option if you want to restore it after. If you look up data store I'm sure removing an option is trivial. Sometimes with widgets it happens that you need to trigger a re-rendering method also to have it update after (you can usually find some method in the widget's API for this, sometimes "reset"), though I believe with stores it may watch them more intelligently.