0

如果用户单击小部件或小部件获得焦点,我有一个包含 7 个 dijit FilteringSelect 小部件的页面,我想连接到从服务器获取的商店。我希望事件触发一次。

如果我将 onfocus="loadDropDown(this)" 添加到我的标记中,它会在每次小部件获得焦点时执行,正如您所期望的那样。

我正在尝试使用 dojo 使用 on.once() 触发事件一次。使用 dojo 事件处理的函数正在运行,但当小部件获得焦点时,永远不会调用事件处理函数。

任何指针?

这是我的标记

<select data-dojo-type="dijit.form.FilteringSelect"
                        type="text" intermediateChanges="false"
                        data-dojo-props="required:false, pageSize:20, placeholder: '---'"
                        scrollOnFocus="true" name="CJ1lxA" style="width: 40em;"
                        id="searchAgency">
                    </select>

这是为了记录事件

function registerDDLoad(){
require(["dojo/on", "dijit", "dojo/ready"], function(on, dijit, ready){
    ready(function(){
        var dropDown = dijit.byId("searchAgency");
        on.once(dropDown, "onfocus", function() {
            loadDropDown(dropDown);
        });
        dropDown = dijit.byId("searchLocation");
        on.once(dropDown, "onfocus", function() {
            loadDropDown(dropDown);
        });
        dropDown = dijit.byId("searchCounty");
        on.once(dropDown, "onfocus", function() {
            loadDropDown(dropDown);
        });
        dropDown = dijit.byId("searchRep");
        on.once(dropDown, "onfocus", function() {
            loadDropDown(dropDown);
        });
        dropDown = dijit.byId("searchSenate");
        on.once(dropDown, "onfocus", function() {
            loadDropDown(dropDown);
        });
        dropDown = dijit.byId("searchStatus");
        on.once(dropDown, "onfocus", function() {
            loadDropDown(dropDown);
        });
        dropDown = dijit.byId("searchAE");
        on.once(dropDown, "onfocus", function() {
            loadDropDown(dropDown);
        });
    });
});
}

registerDDLoad();
4

1 回答 1

1

dojo 事件类dojo/on期望在没有“on”的情况下指定事件:

onFocus = focus
onClick = click
onMouseOut = mouseout
...

我认为改变它应该可以解决你的问题。我已将您的代码复制到jsFiddle上的测试区域,因此您可以使用它。

注意:由于您正在重新使用下拉变量,因此它将始终等于最后一个 filterSelect (id=searchAE),而不是之前的那个。

于 2012-11-16T06:57:35.583 回答