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