Ваш вопрос не имеет большого смысла. Вы говорите:
Исходное поле ввода будет доступно только для чтения и, следовательно, сможет прослушивать только события клавиатуры.
... но это не имеет смысла. Если он доступен только для чтения, вы не можете сфокусировать поле ... это означает, что вы не можете передавать ему события клавиатуры. Независимо от того, вы всегда можете получить и установить значение поля, даже если оно readonly
или disabled
. Если вы не хотите использовать jQuery's val()
, используйте обычный JS.
$(".src").keyup(function(e){
document.getElementsByClassName('target')[0].value = e.target.value;
});
Update: Теперь я думаю, что я понимаю ваш вопрос. Ваша основная цель состоит в том, что вы хотите изменить цвет каретки, спрятав сфокусированное поле и записывая в другое поле. Не уверен, почему вы хотите это сделать, поскольку я заверяю вас, что ваши пользователи не заботятся, и вы рискуете помешать работе с пользователями ... и когда я печатаю это сообщение, я даже не замечаю цвет каретки в Chrome ... buuuut, у меня такое чувство, что вы все еще думаете, что ваши входы более особенные, чем другие. Я чувствую для ваших пользователей, которые пытаются поставить курсор на более раннюю точку ввода, чтобы исправить опечатку ... Я отвлекся.
Вместо 2 входов создайте один вход, установите непрозрачность 0 и записывайте все значение в DIV всякий раз, когда он изменяется. Это имеет много преимуществ:
- Вы получаете много поведений поведения по умолчанию для ввода, фактически не нуждаясь в этом (например, курсор на наведении на рабочий стол, навигация на клавиатуре и т. Д.).
- Ваша форма все равно может сделать ваниль submit без необходимости копировать значения или любую другую странность javascript.
- Любые другие коды, скрипты проверки и т. Д. Не нуждаются в изменении - вход все равно получает значение и испускает все события.
https://jsfiddle.net/2sp92bpy/1/
Другим вариантом было бы создать временный элемент ввода над ReadOnly на фокус, так что похоже, что изменяется в то же время будучи в состоянии собрать входные данные пользователя. –
Причина, по которой я делаю это, - изменить цвет каретки. На iOS у каретки есть неизменный (синий) цвет (см. [Этот пост] (http://stackoverflow.com/questions/37528011/ios-safari-input-caret-color) и [этот пост] (http: // переполнение стека.com/questions/30655753/how-to-change-default-color-of-care-on-ios-for-input)), что нежелательно. Если я создаю временный элемент ввода над readonly, его каретка будет видна. –
Я думаю, что мой лучший выбор - объединить коды ключей с строками и учитывать обратные коды ключей, изменения позиции каретки и т. Д. Также копирование/вставка текста из полей readonly не работает, что довольно сложно :( –