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

标签 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();
    });
});

还有 fiddle :http://jsfiddle.net/3CLz9/

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

最佳答案

您可以使用dojo/on模块的once()功能。但我不认为这就是你想要的。我想您想在每次输入字段获得焦点时选择文本。如果您需要此功能,则应该使用 onFocus 事件(因此将 “click” 替换为 “focus”)。

现在唯一的问题是,选择文本后,默认事件会将光标移动到所选位置并取消选择文本(您将看到它闪烁)。为了解决这个问题,您还应该绑定(bind)一个 mouseup 事件处理程序,该处理程序会在您刚刚获得焦点时取消。例如:

query("#firstname").on("focus", function(evt) {
    this.select();
    on.once(this, "mouseup", function(evt) {
       evt.preventDefault(); 
    });
});

我还更新了您的fiddle .

<小时/>

我刚刚注意到你实际上使用的是 dijit/form/TextBox 小部件(在你的 JSFiddle 上不起作用,所以这就是我没有注意到它的原因),但是你可以轻松地做到这与 selectOnClick 属性一起使用。将其添加到您的 data-dojo-props 中,它将起作用。

例如:

<input type="text" name="firstname" value="testing testing"
    data-dojo-type="dijit/form/TextBox"
    data-dojo-props="trim:true, propercase:true, selectOnClick: true" id="firstname" />

这里是your fiddle (带有工作文本框小部件)。如果您想对 1.7 以下的 Dojo 版本执行相同的操作,您可以按照 this fiddle 中的描述进行操作。 .

关于javascript - 仅在第一次单击时选择所有文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21673144/

相关文章:

java - 在 Java Nashorn 中访问对象变量

javascript - 在没有 $scope 的情况下使用 $watch( Controller 作为语法)

javascript - 对 MemoryStore(或任意数据数组)中的数据进行排序

javascript - DGrid - 使用拖放时的单选模式 -> 结果是多选

javascript - Dojocharts 未出现在 Mozilla 和 IE 中

javascript - html 选择列表 - 通过传入变量获取文本值?

javascript - 使用 setTimeout 函数。和随机函数。为类元素添加动画

javascript - 在 JavaScript 计算器中链接多个操作

javascript - 我如何使用javascript或dojo从链接或按钮实现 'copy url to clipboard'而不使用flash

javascript - 检查 dijit.form.Validation TextBox 是否在验证器中具有焦点