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

Dojo: set default TextBox for typing

本文关键字:默认 文本 输入 设置 用于 Dojo      更新时间:2023-09-26

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

<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小部件有一个焦点框架,但是光标不在那里。

    这是一个bug吗?如何确保光标在搜索小部件上?

编辑:

我将重新表述这个问题:如何设置一些文本框,这样当页面加载和用户开始输入时,默认情况下它将出现在该文本框中?

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

为了初始化小部件,您需要从JS中获取对它的引用并调用它的focus方法。

假设您已经定义了一个附加点和附加事件,我将假设这个小部件是另一个小部件模板的一部分,在这种情况下,您应该能够最初将其集中在模板化小部件的startup方法中(尽管取决于您的页面/应用程序的加载方式,可能有更好的时间这样做):

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

(我可能建议不要将附加点称为"searchNode",因为在本例中它是一个小部件,而不是DOM节点)

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

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

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