Javascript 如何让事件委派处理Dojo FilteringSelect更改?

Javascript 如何让事件委派处理Dojo FilteringSelect更改?,javascript,dojo,event-handling,Javascript,Dojo,Event Handling,我有一个充满各种输入的Dojo表单,所有Dojo小部件;其中之一是dijit/form/FilteringSelect。我在表单上定义了一个事件委托处理程序,用于从表单中的所有Dojo小部件捕获特定事件。委托使用CSS样式选择器语法来标识它将处理的所有类型的输入和事件,但是我找不到正确的选择器来捕获从FilteringSelect小部件中选择的选项。dijit/form/Select和dijit/form/ComboBox小部件也存在同样的问题 我创建了一个演示,其中包含: <div id

我有一个充满各种输入的Dojo表单,所有Dojo小部件;其中之一是dijit/form/FilteringSelect。我在表单上定义了一个事件委托处理程序,用于从表单中的所有Dojo小部件捕获特定事件。委托使用CSS样式选择器语法来标识它将处理的所有类型的输入和事件,但是我找不到正确的选择器来捕获从FilteringSelect小部件中选择的选项。dijit/form/Select和dijit/form/ComboBox小部件也存在同样的问题

我创建了一个演示,其中包含:

<div id="testDiv">
<form data-dojo-type="dijit/form/Form" id="testForm" data-dojo-id="testForm"  encType="multipart/form-data" 
action="" method=""> 
<table>
<tr>
    <td align="left"><input data-dojo-type="dijit/form/RadioButton" data-dojo-id="yellowid" id="yellowid" name="color" value="4"/><label id="corpLabel"  for="yellowid">Yellow</label></td>
</tr>
<tr>
    <td align="left"><input data-dojo-type="dijit/form/RadioButton" id="redid" name="color" value="5"/><label class="forInput" for="redid">Red</label></td>
</tr>
<tr>
    <td align="left"><input data-dojo-type="dijit/form/RadioButton" data-dojo-id="blueid" id="blueid" name="color" value="6"/><label id="llpLabel"  for="blueid">Blue</label></td>
</tr>
<tr>
    <td align="left"><input data-dojo-type="dijit/form/RadioButton" id="greenid" name="color" value="7"/><label  for="greenid">Green</label></td>
</tr>
<tr>
    <td>Dojo FilteringSelect</td>
    <td>
        <select data-dojo-type="dijit/form/FilteringSelect" id="fruit" name="fruit">
<option value="AP">Apples</option>
<option value="OR" selected>Oranges</option>
<option value="PE" >Pears</option>
</select> &nbsp; (onChange event not triggered by selection, but typing value triggers event)
    </td>
</tr>
<tr>
    <td>Dojo Select</td>
    <td>
<select name="select1" data-dojo-type="dijit/form/Select">
<option value="TN">Tennessee</option>
<option value="VA" selected="selected">Virginia</option>
<option value="WA">Washington</option>
<option value="FL">Florida</option>
<option value="CA">California</option>
</select>
    </td>
</tr>
<tr>
    <td>Dojo ComboBox</td>
    <td>
    <select data-dojo-type="dijit/form/ComboBox" id="animal" name="animal">
<option>Dogs</option>
<option selected>Fish</option>
<option>Spiders</option>
</select>
</td>
</tr>
</table>
</form>
</div>

事件委托处理程序不会捕获用户在FilteringSelect和Select widgets文本字段中键入的事件,但不会在从列表中选择选项时捕获。有没有办法让代理识别选择操作?

您可以运行一个循环,然后插入每个表单小部件的onChange(例如,on(widget,“change”))事件?谢谢。我可以这样做,但我希望尽可能利用事件委托模式。如果有必要,我会做这样的循环。
require(["dojo/dom", "dojo/on", "dojo/query",
"dojo/parser", "dojo/dom-construct", "dojo/domReady!"
    ], function(dom, dojoOn, dojoQuery, parser, domConstruct) {

         var eventDescriptions =
             "textarea:change,"+  
             "textarea:input,"+ 
             "input:change,"+  
             "input:input,"+ 
             "div.dijitArrowButtonInner:click,"+ 
             "select:change,"+  
             "grid:onRowClick,"+
             "button:click";
var paneForm = dom.byId("testForm");
         if(typeof paneForm != "undefined" && paneForm != null) {
             dojoOn(paneForm, eventDescriptions, handleFormEvent);
         }    

function handleFormEvent(event){ 
    console.log("handleFormEvent event="+event+" currentTarget="+event.currentTarget.id+", this.value="+this.value);
    console.log("event=");
    console.dir(event);
    console.log("this=");
    console.dir(this);
    alert("Event delegate caught this event of type: "+event.type);
}
});