Dojo事件未触发

Dojo events not triggering

本文关键字:事件 Dojo      更新时间:2023-09-26

我有一个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事件,所以我不能使用第二种方法…有什么好主意吗?

"tab content"实际上是一个 content Pane元素。你不能在内容面板内调用javascript,除非你使用<script type="dojo/method">。至少这是我知道的。

更新:如果你使用dojox.layout.ContentPane而不是dijit.layout.ContentPane所有关于js里面的问题将消失。来自Dojo参考指南:

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

看起来你需要使用dojo。挂起,这样当函数被实际调用时,它将在作用域中。尝试使用:

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

您可以在这里阅读更多信息:http://dojotoolkit.org/reference-guide/dojo/hitch.html#dojo-hitch

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

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