【问题标题】:How to override the dojo control focus method on FF如何覆盖FF上的dojo控制焦点方法
【发布时间】:2011-10-28 19:47:15
【问题描述】:

我们有一个使用 dijit 控件的现有应用程序。当控件聚焦时,前 FF6 上的先前行为是它也被选中。但是,从 FF6 开始,控件不再选择所有文本。现在的问题是我们的代码中有很多 dojo.byId('ctrlId').focus() 。我可以通过在每次焦点调用后添加 dojo.byId('ctrlId').select() 代码来解决这个问题。但我正在寻找一种更全球化的方法来解决这个问题。

我尝试覆盖焦点方法,但它不起作用。

HTMLFormElement.prototype._select = HTMLFormElement.prototype.select;
dijit.prototype.focus = function() {
    this.focus.apply();
    this.select.apply();
}

有什么想法吗?

【问题讨论】:

    标签: dojo setfocus textselection firefox6


    【解决方案1】:

    首先,您应该使用 dijit.byId 而不是 dojo.byId。 Dijit 是复杂的类,使用 dijit.byId 将确保您的目标是正确的。

    其次,您使用的是哪个 Dijit?您可以在此处查看列表:http://dojotoolkit.org/api/1.6/dijit/form

    第三,我不完全确定“当控件获得焦点时它也被选中”是什么意思。你的意思是dijit里面的文字被选中了吗?

    假设我们正在处理 dijit.form.TextBox,那么捕获焦点事件并强制选择怎么样?像这样的:

    dojo.connect( dijit.byId('ctrlId'), 'focus',  function() { dojo.query( 'input', dijit.byId('ctrlId' ).domNode )[0].select() } );
    

    (我没有对此进行测试,但你明白我希望的想法。)

    【讨论】:

    • 嗨 voidstate,是的,我正在使用 diji.form.TextBox。是的,选择意味着选择文本框中当前的所有文本。我可以做焦点事件,但这意味着我需要为控件的所有实例编写一个连接语句。我想知道是否可以通过一个代码来处理所有文本框实例。所以如果我调用 focus() 方法,它只会选择文本框内的所有文本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-06
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多