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);
我不喜欢使用定时器(即使是零定时器),但这可能是唯一的解决方案。
人们希望在页面加载时将光标设置在搜索字段上。代码:
<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);
我不喜欢使用定时器(即使是零定时器),但这可能是唯一的解决方案。