Dojo:设置用于输入的默认文本框

Dojo: set default TextBox for typing

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

<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 中?

focused_FocusMixin 中被记录为只读 属性;最初设置它不会像你想象的那样。

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

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

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

    this.searchNode.focus();
});

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

在花了几个小时尝试了一堆解决方案(none 其中有效)之后,我找到了真正解决问题的方案 - 使用 setTimeout()

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

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