2010-02-04 43 views
4

我完全陌生的道場......從我與jQuery有些經驗正在繪製...Dojo元素/小部件定位,我做錯了什麼?

我有幾個元素,像這樣:

<input name="info1" value="" style="width:52px" contstraints="{pattern:'#'}" dojoType="dijit.form.NumberTextBox"/> 

<input name="info2" value="" style="width:52px" contstraints="{pattern:'#'}" dojoType="dijit.form.NumberTextBox"/> 

<input name="info3" value="" style="width:52px" contstraints="{pattern:'#'}" dojoType="dijit.form.NumberTextBox"/> 

但我有困難的時候特林分配一個簡單的onkeyup事件......一切我用盡看起來像它會工作,但不...控制檯始終報告的東西即時試圖做的是不是一個函數...

dojo.addOnLoad(function() 
{ 
    dojo.query('input[name^=info]').connect('onkeyup',function(e) 
    { 
     console.log('oh yeah'); 
    }); 
}); 

什麼我做錯了,我該找什麼?

回答

2

不幸的是,dojo.query()將只返回本地DOM節點。我想你想要找回被渲染的Dijit Widget。

爲此,您需要分配輸入ID並使用dijit.byId()

另外,與本地HTML事件名稱不同,Dojo事件名稱區分大小寫。因此,onkeyup引用本機HTML,並且與Dojo事件名稱onKeyUp不同。

我想你可能在contstraints有額外的't'。

使用示例:

<html> 
<head> 
<title>Test</title> 
<link type="text/css" rel="stylesheet" href="dijit/themes/tundra/tundra.css"/> 
</head> 
<body class="tundra"> 

<input id="input1" name="input" type="text"dojoType="dijit.form.NumberTextBox"/> 

<script type="text/javascript" src="dojo/dojo.js" 
     djConfig="isDebug: true, parseOnLoad: true"></script> 

<script type="text/javascript"> 
dojo.require("dijit.form.NumberTextBox"); 
dojo.addOnLoad(
    function() { 
     dojo.connect(dijit.byId("input1"), 'onKeyUp', 
       function(e) { console.log('oh yeah'); }); 
    } 
); 
</script> 

</body> 
</html> 
+0

如果你想要一個Dijit,沒有必要去分配id的一切。只需將dojo.query的結果傳遞給dijit.byNode即可獲取小部件引用。 – peller 2010-02-05 02:04:01

+1

小部件初始化完成後,dom被改變,傳遞原始elem節點到dijit.byNode不返回小部件 – farinspace 2010-02-05 05:04:53

+0

哦是的,表單元素是特殊的。他們實際上將輸入控件的名稱留在原位,以便正常的表單提交作品,並且他們創建了一個單獨的結構來處理UI呈現。你是對的 - 你需要用不同的方式來創建你的查詢,比如使用dojoType或id ......當你創建它時,直接綁定到這個小部件就更容易了。 – peller 2010-02-05 18:34:29

0

道場讓您能夠輕鬆的通過查詢之苦聲明事件。只需將事件置於標記中即可。見http://docs.dojocampus.org/quickstart/events#events-with-dijit

<input name="info1" value="" style="width:52px" constraints="{places:0}" dojoType="dijit.form.NumberTextBox" onkeyup="console.log('key up')" /> 

它更簡潔,而且你不需要名稱和查找引用剛剛綁定事件。

無論哪種方式,abboq都是正確的,您通常會直接處理小部件而不是DOM節點,因爲實例化Dijit通常會重構DOM,使其看起來與原始頁面非常不同。該小部件充當抽象。

+0

你的dom被dojo改變了,我遇到的另一個問題是如何在dom重構後(widget被初始化後)獲得這些元素的集合... – farinspace 2010-02-05 04:58:58