FF上のdojoコントロールのフォーカスメソッドをオーバーライドする方法

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

何か案は?

1

1 答え

まず、dojo.byIdではなくdijit.byIdを使用する必要があります。 Dijitは複雑なクラスであり、dijit.byIdを使用することで、適切なものをターゲットにすることができます。

Secondly, which Dijit are you using? You can see a list here: 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() } );

(私はこれをテストしていないが、あなたは私が望む考えを得る。)

2
追加された
こんにちはvoidstate、はい私はdiji.form.TextBoxを使用しています。はい、選択は、現在テキストボックスにあるすべてのテキストを選択することを意味します。私はフォーカスイベントを行うことができますが、それは私がコントロールのすべてのインスタンスの接続ステートメントを記述する必要があることを意味します。テキストボックスのすべてのインスタンスに対してただ1つのコードで可能かどうかは疑問です。ですから、focus()メソッドを呼び出すと、テキストボックス内のすべてのテキストが選択されます。
追加された 著者 Nap,