仅在第一次单击时选择所有文本

时间:2014-02-10 09:20:42

标签: javascript dojo

我正在使用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/

所以主要的问题是我无法确定是否选择了一个或多个字符。

1 个答案:

答案 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中描述的那样做。