2013-08-22 140 views
0

我在测试文件中有以下内容。我正在尝试将选定的值从filteringselect写入divid。它第一次正常工作,但下一次没有发生过滤(下拉菜单中没有可用的值)。 对于第一次更改过滤选择onchange被调用成功。FilteringSelect第二次不工作

请帮助我找到问题。我是道场新手。 DOJO版本 - 道场1.8

<script> 
    require([ 
     "dojo/store/Memory", "dijit/form/FilteringSelect", "dojo/domReady!" 
    ], function(Memory, FilteringSelect){ 
     var stateStore = new Memory({ 
      data: [ 
       {name:"Alabama", id:"AL"}, 
       {name:"Alaska", id:"AK"}, 
       {name:"American Samoa", id:"AS"}, 
       {name:"Arizona", id:"AZ"}, 
       {name:"Arkansas", id:"AR"}, 
       {name:"Armed Forces Europe", id:"AE"}, 
       {name:"Armed Forces Pacific", id:"AP"}, 
       {name:"Armed Forces the Americas", id:"AA"}, 
       {name:"California", id:"CA"}, 
       {name:"Colorado", id:"CO"}, 
       {name:"Connecticut", id:"CT"}, 
       {name:"Delaware", id:"DE"} 
      ] 
     }); 

     var filteringSelect = new FilteringSelect({ 
      id: "stateSelect", 
      name: "state", 
      placeHolder: "Select a State", 
      store: stateStore, 
      searchAttr: "name", 
      onChange: function(value) { 
       var text1 = document.getElementById("divid").innerHTML 
       document.getElementById("divid").innerHTML = text1 + dijit.byId('stateSelect').attr('displayedValue') + ';'; 
      } 
     }, "stateSelect"); 
    }); 
</script> 

<div id="divid"> 
    Select a State : <input id="stateSelect"> 
</div> 

回答

1

你的错误是由于你登录你的输出方式:

var text1 = document.getElementById("divid").innerHTML; 
document.getElementById("divid").innerHTML = text1 + [...] 

由于 'DIVID' 包含FilteringSelect来dijit的标记,重新设置divid.innerHTML将覆盖现有的DOM并混淆现有的FilteringSelect dijit实例。一般来说,你不应该修改dijit实例的DOM。 只是一个空的span元素添加到您的标记来记录你的价值观:

<div id="divid"> 
Select a State : <input id="stateSelect"> 
<span id="buffer"></span> 
</div> 

,并成为的onChange:

onChange: function(value){ 
var text1 = document.getElementById("buffer").innerHTML; 
document.getElementById("buffer").innerHTML = text1 + [...] 
}