Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Dojo查询找不到div_Javascript_Dom_Dojo - Fatal编程技术网

Javascript Dojo查询找不到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

我是个新手,在使用它时遇到了一个奇怪的问题

我的目标是显示一些搜索结果

因此,我构建了一个存储,查询它,并通过为每个结果添加一个新div来显示结果:

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