Dojo:设置默认TextBox以进行输入

时间:2015-09-21 07:28:49

标签: javascript dojo focus

人们希望在页面加载时在搜索字段上设置光标。代码:

<input class="search-input"
  data-dojo-type="dijit/form/TextBox"
  data-dojo-attach-point="searchNode"
  data-dojo-attach-event="keyup: searchKeyUpEvent"
  data-dojo-props="
    focused: true,
    placeHolder: 'Search'" />

在页面加载时,TextBox小部件有一个焦点框架,但光标不在那里..

  • 这是一个错误吗?
  • 如何确保光标位于搜索小部件?

修改 我将重新提出一个问题:如何设置一些TextBox,所以当页面加载并且用户开始输入时,它默认会出现在TextBox中?

2 个答案:

答案 0 :(得分:3)

focused被记录为_FocusMixin中的只读属性;设置它最初不会做你认为它做的。

要最初聚焦窗口小部件,您需要从JS获取对它的引用并调用其focus方法。

鉴于您已定义了附加点和附加事件,我假设此窗口小部件是另一个窗口小部件模板的一部分,在这种情况下,您应该能够最初将其集中在模板化小部件的startup方法(虽然取决于您的网页/应用加载方式,但可能有更好的时间来执行此操作):

startup: function () {
    if (this._started) {
        return;
    }
    this.inherited(arguments);

    this.searchNode.focus();
});

(我可能建议不要调用附加点&#34; searchNode&#34;,因为它在这种情况下是一个小部件,而不是DOM节点。)

答案 1 :(得分:1)

花了几个小时尝试一堆解决方案(其中没有一个有效)我带来了实际解决问题的解决方案 - 使用setTimeout()

window.setTimeout(function(){
  _this.searchNode.focusNode.focus();
}, 0);

我不喜欢使用计时器(即使是零计时器)的想法,但这可能是唯一的解决方案。