Как переопределить метод фокусировки элемента управления dojo на FF

У нас есть приложение, использующее элементы управления dijit. Предыдущее поведение на pre 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 ответ

Во-первых, вы должны использовать dijit.byId, а не dojo.byId. Dijits являются сложными классами, и использование dijit.byId гарантирует, что вы нацеливаетесь на правильные вещи.

Во-вторых, какой Dijit вы используете? Вы можете увидеть список здесь: http://dojotoolkit.org/api/1.6/dijit/form

В-третьих, я не совсем уверен, что вы подразумеваете под "когда элемент управления сфокусирован, он также выбирается". Вы имеете в виду, что текст внутри диджита выделен?

Предполагая, что мы имеем дело с dijit.form.TextBox, как насчет перехвата события фокуса и принудительного выбора? Что-то вроде этого:

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

(Я не проверял это, но вы поняли идею, я надеюсь.)

Другие вопросы по тегам