Javascript Dojo查询找不到div
我是个新手,在使用它时遇到了一个奇怪的问题 我的目标是显示一些搜索结果 因此,我构建了一个存储,查询它,并通过为每个结果添加一个新div来显示结果:Javascript Dojo查询找不到div,javascript,dom,dojo,Javascript,Dom,Dojo,我是个新手,在使用它时遇到了一个奇怪的问题 我的目标是显示一些搜索结果 因此,我构建了一个存储,查询它,并通过为每个结果添加一个新div来显示结果: var adresseStore; require([ "dojo/dom", "dojo/store/Memory", "dojo/dom-construct", "dojo/query", .. ], function(dom, Me
var adresseStore;
require([
"dojo/dom",
"dojo/store/Memory",
"dojo/dom-construct",
"dojo/query",
..
],
function(dom, Memory, domConstruct, query){
...
var container = dom.byId("chefDiv")
adresseStore = new Memory({data:data, idProperty: "myId"});
adresseStore.query().forEach(function(item, i){
addRow(item, container)
// do something with the index
});
...
});
其中addRow
基本上调用domConstruct.create(“div”,{…,class:“adrese”,…},container)代码>
它工作得很好-我有一些类似的东西:
<div id="chefDiv">
<div class="adresse" ...>...</div>
<div class="adresse" ...>...</div>
</div>
它仍然可以正常工作
太好了!!!添加一个隐藏无效结果的按钮怎么样?我们走吧:
首先,添加以下代码:
query(".adresse").on("click", function(){
// do stuff and open a window
}
query(".sltValide").on("click", function(){
domConstruct.empty("chefDiv");
adresseStore.query({validite:"V"}).forEach(function(item, i){
addRow(item, container)
// stuff with i
}); // foreach
}); // sltValide
一切都很好,我还有我的
<div id="chefDiv">
<div class="adresse" ...>...</div>
<div class="adresse" ...>...</div>
</div>
...
...
有了我想要显示的数据,我很高兴
。。。直到我点击一个div打开窗口
query(“.adrese”)。在(“单击”,function(){…
从不激发,因为查询(“.adrese”)
不返回任何内容
有人有线索吗?问题是在动态创建所有节点之前,query()
只包含DOM节点
要解决这个问题,您应该向on()
函数提供一个查询(类似于jQuery处理它的方式),例如:
query(#chefDiv”)。在(.address:click)上,函数(){
//应该执行的代码
});
当然,您必须使用容器节点进行查询,在您的情况下,它应该是#chefDiv
。这样,还将考虑动态节点
我还举了一个完整的例子,你可以在这里看到:我实际上想知道问题是否不在我使用MemoryStore的方式上-也许我应该重新加载页面(以及商店,提出一个全新的请求),而不是将其用作缓存???太好了,它工作得很完美+你为我解决了一个“dojo之谜”…非常感谢:-)不过,正如我所说,这并不是一个真正的Dojo谜团,jQuery也是这样做的,在jQuery中,您可以将它写成$(“#chefDiv”)。on(“click”,“.adrese”,function(){});
。这是因为在您执行查询时,元素还不知道。但是,您正在将事件处理程序绑定到这些元素,这就是为什么动态元素不会对其作出反应。您是对的,这是在您回答之前我无法理解的一点:我知道我正在将处理程序绑定到not(尚未)已知元素,但无法确定如何使用on()
函数中的查询-再次使用thanx