Dojo事件不会触发

时间:2011-08-19 17:20:53

标签: javascript ajax javascript-events dojo

我有一个Dojo标签容器,当我点击某些按钮时,会动态添加一个新标签,其内容通过Ajax下载。选项卡包含动态表单元素,由Dojo解析和加载就好了。我还包括特定于每个选项卡的Javascript块,这些块也可以通过Ajax下载...但是,没有任何Javascript块执行!

标签内容示例:

<input id="test" name="test" type="text" dojoType="dijit.form.ValidationTextBox" />

<script type="text/javascript">
   dojo.connect(dijit.byId('test'), 'onClick', function(evt){
       alert('testing 123');
   });
</script>

但是,如果我这样做,事件触发就好了:

<input id="test" name="test" type="text" dojoType="dijit.form.ValidationTextBox">
    <script type="dojo/method" event='onClick'>
         alert('testing 123');
    </script>
</input>

我的问题是,为什么第一个例子中的javascript块没有工作?这是一个Dojo限制吗?此外,我还试图在小部件加载后设置属性和值。我如何激活,因为我必须使用像dojo.addOnLoad()这样的东西,因为它需要一个Javascript块,并且根据第一个例子不起作用,因此它不起作用...没有等效的小部件onLoad事件所以我也不能使用第二种方法......任何想法如何去做?

3 个答案:

答案 0 :(得分:2)

“标签内容”实际上是内容窗格元素。除非使用<script type="dojo/method">,否则无法在内容窗格中调用javascript。至少这是我所知道的。

更新:如果您使用dojox.layout.ContentPane代替dijit.layout.ContentPane,其中有关js的所有问题都会消失。从Dojo参考指南:

  

dojox.layout.ContenPane是dijit.layout.ContentPane的扩展,提供脚本执行等功能。

答案 1 :(得分:0)

看起来你需要使用dojo.hitch,这样你的函数在实际调用时就会在范围内。尝试使用:

dojo.connect(dijit.byId('test'), 'onCLick', dojo.hitch(this, function(evt) {
      alert('testing123');
}));

您可以在此处详细了解:http://dojotoolkit.org/reference-guide/dojo/hitch.html#dojo-hitch

答案 2 :(得分:0)

您必须确保首先解析小部件。这样做:

dojo.addOnLoad(function(){/*connect code*/});