如何在聚焦dijit.form.TextBox或类似小部件时选择所有值文本

时间:2011-02-22 01:02:07

标签: javascript dojo

我正在寻找一种方法,当聚焦dijit.form.TextBox或扩展/类似小部件(如NumberTextBox,CurrencyTextBox)时,选择其输入DOM节点中的所有文本。

以下节点似乎无效:

<input type="text" id="widget" dojoType="dijit.form.TextBox" value="a value" />
<script type="text/javascript">
dojo.connect( dijit.byId('widget'), 'onFocus', function() {
    this.textbox.select();
});
</script>

4 个答案:

答案 0 :(得分:6)

如果你正在使用Dojo 1.4或更高版本,那么在TextBox上已经存在一个名为selectOnClick的属性 - 只需将其设置为true,它就可以做你想要的。

这可能实际上是你的代码无法正常运行的部分原因,因为从技术上讲,你似乎正在正确使用小部件事件 - 除了this可能不是你想要的,你连接事件的方式

答案 1 :(得分:4)

我发现selectOnClick并不总是有用,因为有时候一个字段会在没有用户点击鼠标的情况下获得焦点。

相反,你可以使用它:

dijit.byId("widgetId").attr("onFocus", function() { this.focusNode.select(); });

注意:focusNode可能不适用于所有小部件。每个都可以有自己的自定义方式来引用INPUT元素。它没有记录FilteringSelect小部件,但它对我来说很好。

答案 2 :(得分:3)

有一些阻止此表单正常工作的事情。

首先,dijit.byId('widget')将选择Dojo小部件(dijit)对象而不是DOM对象。此事件和可用方法与底层DOM对象不同。另一方面,dojo.byId()选择DOM元素。

其次,“onFocus”不会以DOM事件为目标。 DOM事件必须全部为小写,因此在这种情况下,您将使用“onfocus”。

试试这段代码:

dojo.connect( dojo.byId('widget'), 'onfocus', function() {
    dojo.byId('widget').select();
});

这应该允许它正常工作。我替换了this.textbox.select(),因为我看不到任何对'this'引用的对象的引用。

Try it here

答案 3 :(得分:0)

自Dojo 1.7以来:

require(["dojo/on", "dojo/dom"], function(on, dom){

    //direct domNode id method
    on( dom.byId('widget'), 'focus', function() {
        dom.byId('widget').select();
    });

    //via programmatic widget reference
    on( myWidgetReference.focusNode, 'focus', function() {
        myWidgetReference.focusNode.select();
    });

});

注意:GreenWebDev的注释仍然存在(re:focusNode availability)