我正在寻找一种方法,当聚焦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>
答案 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'引用的对象的引用。
答案 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)