Выяснить сфокусированный контроль - PullRequest
1 голос
/ 25 декабря 2008

Я пытаюсь добавить класс CSS в элемент управления, который получит фокус, как только страница будет отображена. Хотя метод SetFocus () класса Page позволяет мне устанавливать элемент управления, соответствующего метода 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 к элементу управления с фокусировкой перед рендерингом страницы.

Ответы [ 4 ]

2 голосов
/ 27 декабря 2008

Если вы ищете решение css для выделения выделенного элемента, я думаю, вы можете использовать селектор ': focus'. Я не пробовал это, но я считаю, что это действительный селектор. Вы бы использовали это так в вашем файле CSS:

:focus{ background-color: yellow;}
1 голос
/ 25 декабря 2008

Элемент управления с фокусом мог измениться между постбеками, поэтому я не думаю, что вы можете легко его найти. Возможно, слишком дорого хранить полное состояние каждого элемента управления в ViewState.

Может быть, вы можете отследить, какой элемент управления имеет фокус в скрытом поле на клиенте, используя JavaScript, и прочитать его на сервере.

0 голосов
/ 30 декабря 2008

Не знаю, правильно ли я понял твой вопрос ...

Не могли бы вы просто добавить cssclass к элементу управления, на котором вы фокусируете настройки на стороне сервера?

controlObj).CssClass = "highlightinput"
Page.SetFocus(controlObj)
0 голосов
/ 27 декабря 2008

Почему бы просто не сделать все это через JavaScript? Что-то вроде:

body.onLoad = function() { document.activeElement.style.color = '#ff0000'}

Это может быть ошибкой, но я думаю, что это хорошее начало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...