我正在使用Dojo 1.6并且只想在第一次点击时选择文本框的所有文本。我知道我可以使用dojo.byId("id").select();
来选择整个文本,但问题是您无法再对文本进行子选择。我提供了一个小代码示例来说明问题。
require(["dojo/parser", "dijit/form/TextBox"]);
require(["dojo/query", "dojo/on", "dojo/domReady!"], function(query, on) {
query("#firstname").on("click", function(evt) {
// this will not work because I want to select 1 or more characters
if (!dojo.byId("firstname").select())
dojo.byId("firstname").select();
});
});
小提琴:http://jsfiddle.net/3CLz9/
所以主要的问题是我无法确定是否选择了一个或多个字符。
答案 0 :(得分:2)
您可以使用dojo/on
模块的once()
功能。但我认为这不是你想要的。我想你想在每次输入字段获得焦点时选择文本。如果您需要此功能,则应使用onFocus
事件,(因此请"click"
替换"focus"
)。
现在唯一的问题是,在您选择文本后,默认事件会将光标移动到所选位置并取消选择文本(您将看到它闪烁)。要解决这个问题,您还应该绑定一个mouseup
事件处理程序,该处理程序在您获得焦点时取消。例如:
query("#firstname").on("focus", function(evt) {
this.select();
on.once(this, "mouseup", function(evt) {
evt.preventDefault();
});
});
我还更新了您的fiddle。
我刚注意到你实际上正在使用dijit/form/TextBox
小部件(不能在你的JSFiddle上工作,这就是为什么我没有注意到它),但你可以轻松地使用{{1}属性。将其添加到您的selectOnClick
即可。
例如:
data-dojo-props
这是your fiddle(带有工作文本框小部件)。如果你想为1.7以下的Dojo版本做同样的事情,你可以像this fiddle中描述的那样做。