【问题标题】:Dojo events not triggeringDojo 事件未触发
【发布时间】:2011-08-19 17:20:53
【问题描述】:

我有一个 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.addOnLoad() 这样的东西,我该如何激活它,因为它需要一个 Javascript 块,并且按照第一个示例不起作用......没有等效的小部件 onLoad 事件,所以我可以'也不要使用第二种方法......有什么想法如何去做吗?

【问题讨论】:

    标签: javascript ajax dojo dom-events


    【解决方案1】:

    “标签内容”实际上是一个内容窗格元素。除非您使用 &lt;script type="dojo/method"&gt;,否则您不能在内容窗格中调用 javascript。至少这是我所知道的。

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

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

    【讨论】:

      【解决方案2】:

      看起来您需要使用 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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 2012-11-04
          • 2012-01-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-30
          • 2020-10-30
          • 2017-02-11
          相关资源
          最近更新 更多