2010-02-04 44 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