dijit声明性事件处理程序

时间:2013-03-25 14:53:32

标签: html css dojo

我正在尝试声明dijit TextBox,但我无法将focus事件附加到其中。

我已经尝试以声明方式这样做了:

<div class="midArea_div">
 <div class="searchBox_div">
   <input type="text" data-dojo-name="searchBox_input" data-dojo-type="dijit.form.TextBox" data-dojo-props="placeHolder:'Search...'"class="searchBox"></input>
    <script type="dojo/on" data-dojo-event="onFocus" data-dojo-args="evt">
         alert("hi");
   </script>
 <div class="searchIcon_overlay"></div>
 </div>
</div>

并以编程方式。 http://jsfiddle.net/YyFw5/

JS:

require([
  "dijit/dijit",
  "dojo/parser",
  "maqetta/space",
  "maqetta/AppStates",
  "dijit/layout/BorderContainer",
  "dijit/layout/ContentPane",
  "dijit/form/TextBox",
  "dojo/on"
]);
require(["dojo/ready", "dojo/dom", "dojo/_base/fx", "dojo/on", "dijit/registry"], function(ready, dom, base_fx, on, registry){
     ready(function(){
         // logic that requires that Dojo is fully initialized should go here
        //on(registry.byId("searchBox_input"), "focus", function(a){alert("hi");});
     });
});

1 个答案:

答案 0 :(得分:1)

声明性示例中,您使用的是dojo/on模块,该模块执行自己的原生DOM事件规范化。 onFocus回调是一个Dijit小部件构造(如果你想查看源代码,则通过_FormMixin混合到_WidgetBase中),当小部件变为“活动”时使用它,或者它内部的小部件具有焦点或已经点击。

您希望将normalized event name与事件处理程序一起使用,如下所示:

<script type="dojo/on" data-dojo-event="focus" data-dojo-args="evt">
     alert("hi");
</script>

我的程序化示例中没有发现任何明显错误,只是您使用ID(来自您的代码示例)不存在的ID调用registry.byId("searchBox_input")。也许您应该在iddata-dojo-props节点上添加<input>密钥。