Сделайте элемент DOM эффективно доступным только для чтения

#.net #dom #mshtml

Вопрос:

Я пишу элемент управления .NET forms для редактирования HTML с помощью MSHTML. Я создаю некоторые пользовательские элементы и хочу, чтобы они были доступны только для чтения. Я думал, что смогу сделать это, сосредоточившись на всем элементе в любое время, когда фокус будет введен в любом месте этого элемента, кроме HTMLElement.Фокус() не выделяет весь элемент, и я, похоже, не могу зафиксировать ввод курсора.

Другим вариантом было бы вызывать событие всякий раз, когда изменяется текст элемента (я ожидаю, что при нажатии клавиши), но я также не могу запустить это событие. Есть какие-нибудь идеи о том, почему мои ожидания относительно поведения событий неверны, или альтернативные предложения по реализации?

Ответ №1:

Я обнаружил, что установка атрибута:

 contentEditable=false
 

Привело к желаемому поведению.

Ответ №2:

В случае, если вы пытаетесь применить поведение только для чтения к элементу управления пользовательским вводом, вы можете попробовать использовать атрибут @readonly этого элемента управления. В противном случае вы также можете добавить прослушиватели событий для соответствующих событий пользовательского интерфейса (keydown, mousedown) и предотвратить их поведение по умолчанию (return false или event.returnValue = false). Что касается отправки пользовательских событий, вы действительно можете это сделать. Используйте имя события, известное IE. И еще одна подсказка может быть такой: зарегистрируйте обработчик событий onchange и верните значение элемента управления к значению defaultValue (свойство любых входных элементов управления).

Надеюсь, некоторые идеи помогут.