1

我正在尝试声明 adijit 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");});
     });
});
4

1 回答 1

1

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

您希望在事件处理程序中使用规范化的事件名称,如下所示:

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

我没有看到您的程序示例有任何明显错误,只是您registry.byId("searchBox_input")使用的 ID (来自您的代码示例)不存在。也许您应该在您的节点上添加一个iddata-dojo-props或作为属性。<input>

于 2013-03-25T19:22:20.170 回答