【问题标题】:dojo dynamically connect onclick event to drop down list itemdojo 动态连接 onclick 事件到下拉列表项
【发布时间】:2013-12-10 17:31:31
【问题描述】:

我有一个搜索框发送 ajax 请求以从 JSON responseText 创建一个项目的下拉列表。 我想将每个项目链接到“onclick”事件。但是,使用下面的代码,一旦我的下拉列表出现,我的所有事件都会同时发生(甚至不是点击)。

function getDropDownList(jso){
    if (jso.errorCode == 0){
        var result = document.createElement("div");
            result.className = "resultList";

        for (var i = 0 ; i < jso.resultats.length && i < 7; i++){
            var item           = document.createElement("div");
                item.className = "item";
                item.innerHTML = jso.results[i].name + ' (' + jso.results[i].localities + ')';

            result.appendChild(item);

            dojo.connect(item, 'onclick', myEventHandler);
        }
     myToolBar.appendChild(result);
     }
}

谁能帮我弄清楚这个方案有什么问题?

【问题讨论】:

  • 我不明白您是如何创建元素列表的。我似乎看到您正在创建一组 附加到父
    ,然后将该 div 附加到名为 myToolbar 的东西。
  • 是的,就是这样。 CSS 使它看起来像我工具栏中搜索框下方的下拉列表。
  • 我想让我吃惊的是,如果你在利用 Dojo,你能不能不简单地使用 Dojo 自己的菜单栏技术?请参阅此页面上名为“MenuBars 和更多”的部分:dojotoolkit.org/documentation/tutorials/1.8/menus
  • 好吧,我还不习惯 Dojo。我使用的是基于 Dojo 1.6 框架构建的 Arcgis API for javascript。我需要的是一个带有 ajax 建议列表的搜索框。我在 1.6 文档中找不到这样的工具。 1.6 的文档有点破,很多例子根本不起作用。

标签: javascript dojo event-handling


【解决方案1】:

我建议使用 dojo/on 和 AMD load。

//this is a way
require(["dojo/query","dojo/domReady!"], function(query){
    //Use "dojo/request" if you need Send a request.
    var result  = dojo.create("div", {class:"resultList"}, null);
    //for()...... or import "dojo/_base/array" and make forEach
    query(dojo.create('div',
                    { innerHTML: jso.results[i].name + ' (' + jso.results[i].localities + ')',
                  class:"item"//other parameters here!.
                            }, null))
    .onclick(function(e){ console.log('clicked', e.target); })//or call myEventHandler
    .place(result);
    //End for
    query(result).place('#myToolBar');//add result to Dom element with id myToolBar
    });

有关 Dojo 活动的更多信息,请访问here

问候

【讨论】:

  • 谢谢,这让我找到了答案。我只需要使用 dojo 1.6 语法调整您的代码。最后,使用 dojo.query(".item").connect 很好。
猜你喜欢
相关资源
最近更新 更多
热门标签