Я пытаюсь добавить класс CSS к элементу управления, который получит фокус после рендеринга страницы. Хотя метод SetFocus () класса Page позволяет мне установить Control, соответствующего метода GetFocus () нет.
Согласно источникам .Net, информация хранится в закрытом члене _focusedControl класса Page. Свойство FocusedControl помечено как внутреннее.
Есть ли способ получить значение частного члена или внутреннего свойства с помощью Reflection?
Любая помощь будет принята с благодарностью.
Уточнение: Вот почему я хочу добавить серверную часть CssClass: я пытаюсь применить следующее Скрипт JQuery, который изменяет фон сфокусированного элемента:
$(document).ready(function() {
var elements = jQuery("textarea, select, multi-select, :text, :password, :file");
elements.bind
(
'focus',
function() {
jQuery(this).addClass('highlightinput');
}
);
elements.bind
(
'blur',
function() {
jQuery(this).removeClass('highlightinput');
}
);
})
Это отлично работает, если я специально не устанавливаю сфокусированный элемент управления в моем aspx.vb. Если я устанавливаю сфокусированный элемент управления (я думаю, из-за проблемы с синхронизацией), фокус устанавливается до того, как мои обработчики будут прикреплены к полям ввода, и, таким образом, ввод не выделяется. Итак, мой подход заключался бы в добавлении класса highlightinput к сфокусированному элементу управления перед рендерингом страницы.





Элемент управления с фокусом мог измениться между постбэками, поэтому я не думаю, что вы сможете его легко найти. Вероятно, слишком дорого хранить все состояние каждого элемента управления во ViewState.
Возможно, вы сможете отследить, какой элемент управления имеет фокус в скрытом поле на клиенте, используя javascript, и прочитать его на сервере.
Если вы ищете решение css для выделения сфокусированного элемента, я считаю, что вы можете использовать селектор ': focus'. Я не пробовал, но считаю, что это верный селектор. Вы бы использовали это так в своем файле css:
:focus{ background-color: yellow;}Спасибо Yobi21, это отлично работает в Firefox, но не поддерживается IE.
Почему бы просто не сделать все это через JavaScript? Что-то вроде:
body.onLoad = function() { document.activeElement.style.color = '#ff0000'}
Это может быть ошибкой, но я думаю, что это хорошее начало.
Спасибо, Шон, я попробовал, но не смог заставить работать. Я бы предпочел знать на стороне сервера, какой элемент управления получит фокус.
Не знаю, правильно ли я понял ваш вопрос ...
Не могли бы вы просто добавить cssclass к элементу управления, на котором сосредоточены ваши настройки на стороне сервера?
controlObj).CssClass = "highlightinput"
Page.SetFocus(controlObj)
Проблема в том, что Page.SetFocus вызывается компонентом, которым я не могу управлять. Итак, я хотел бы выяснить, какой элемент управления будет сфокусирован после рендеринга страницы, чтобы я мог установить дополнительный класс CssClass. Кроме того, я хотел бы иметь общий подход, который я мог бы добавить к базовому классу
Это верно. Однако мне не нужна информация, чтобы пережить обратную передачу. Мне просто нужно знать последний элемент управления, который был передан методу SetFocus.