2012-11-26 69 views
5

我嘗試dojotoolkit 1.8和無法弄清楚如何掛鉤的道場/形式的onchange事件/選擇道場/表格/選擇onchange事件在道場不是爲我工作1.8

自認倒黴

情況
require(["dojo/dom","dojo/on"], function(dom,on){ 
    on(dom.byId("myselect"),"change",function (evt){ 
     alert("myselect_event"); 

}); 

相反,如果以下勾成單擊Works:

on(dom.byId("myselect"),"click",function (evt){ 
  • ,但我想捕獲用戶點擊後的值並改變

我敢肯定它比回到純醇的JavaScript的onChange ...

THX簡單

+2

你混合了Dijit的對象和DOM節點。 @噴嘴人的解決方案應該可以工作。如果您想了解更多信息,請查看[Dojo無法以編程方式連接dijits?](http://stackoverflow.com/questions/8454552/dojo-cant-programmatically-concatenate-djits/8455984#8455984) – phusick

回答

4

你可以嘗試這樣的事:

var select = dijit.byId('myselect'); 

    select.on('change', function(evt) { 
     alert('myselect_event'); 
    }); 

我已經多次在參考指南中看到這一點,例如in the dijit/form/select' s reference-guide'A Select A By A Store'

也許它甚至回到了handle,我到目前爲止沒有看過這個。但我想它應該工作。

編輯:

考慮@ phusick的評論,我想補充一點,你也可以簡單地改變"change""onChange"domdijit內調用on(...)

+0

Thx這麼多你們 - 還是有點新的JS/Dojo ... – Aveesh

+0

嗯,我們很高興beeing能夠幫助你!那麼接受答案怎麼樣? ;) – nozzleman

+0

會接受 - 讓我想象如何:-) - 也是新的! – Aveesh

2

中的腳步@ nozzleman的答案嘗試

var select = registry.byId('myselect'); 

select.on('change', function(evt) { 
    alert('myselect_event'); 
}); 

如果使用on代替connect那麼你不必寫onChange,你可以簡單地寫change

+0

Thx--額外的說明 - 正在使用element.on比使用on(domnode,「event」)更好地構造,還是僅僅說出同樣的東西的兩種方式...... – Aveesh

+0

我認爲前者更好是因爲2個原因。首先,它遵循其他JS框架的API(如jQuery),其次,它可能會在未來成爲本地的。 –

0

類似於上面的答案,做一個dijit.ById來找到正確的元素,然後註冊'onItemClick'事件。

創建選擇下拉編程追加_menu到您所創建的選擇項目,使「搜索」變成了「search_menu」頁面上的初始化,您可以執行以下任何節點:

dojo.connect(dijit.byId('search_menu'),'onItemClick',function(){ 
     //console.log("search menu"); 
     doSearch('recreation'); 
    });  
0

正如其他人所指出的,你正嘗試使用DOM訪問Dijit。此外,「更改」事件的匿名功能的參數是用戶選擇的,而不是事件本身。

這裏是你的代碼修改,以訪問的Dijit和處理「變」事件:

require(["dijit/registry", "dojo/on"], function(registry, on) { 
    on(registry.byId("myselect"), "change", function (value) { 
     alert("change_event.value = " + value); 
    }); 
}); 
0

遲到了,但我最近遇到了這個問題。希望我的回答能幫助一些可憐的人維護一些遺留代碼。答案是爲組合框,但爲選擇工作 -

onChange不足以觸發從Dojo Combobox查詢。需要將偵聽器附加到下拉項目。

select.dropDown.on("itemClick", function(dijit, event) { 
var node = dijit.domNode; 
console.log(domAttr.get(node, "data-info-attribute")); 
// or 
console.log(node.dataset.infoAttribute); 
}); 

編號:https://stackoverflow.com/a/12422155/4564016