2016-08-22 2 views
0

Мой вопрос похож на this или this вопрос.jQuery: синхронизировать два текстовых поля без использования val()

Однако все ответы там используют функцию val jQuery для копирования значения между полями.

Я не могу использовать val, так как поле ввода источника будет readonly.

Поэтому я хочу захватить события клавиатуры в поле ввода источника и на основе этого заполнить целевое текстовое поле. Это можно сделать?

Я надеялся, что что-то подобное сделает это, но это не сработает.

$(".src").keyup(function(e){ 
    $(".target").trigger(e); 
}); 

Любые идеи?

+0

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

+0

Причина, по которой я делаю это, - изменить цвет каретки. На 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, его каретка будет видна. –

+0

Я думаю, что мой лучший выбор - объединить коды ключей с строками и учитывать обратные коды ключей, изменения позиции каретки и т. Д. Также копирование/вставка текста из полей readonly не работает, что довольно сложно :( –

ответ

1

Ваш вопрос не имеет большого смысла. Вы говорите:

Исходное поле ввода будет доступно только для чтения и, следовательно, сможет прослушивать только события клавиатуры.

... но это не имеет смысла. Если он доступен только для чтения, вы не можете сфокусировать поле ... это означает, что вы не можете передавать ему события клавиатуры. Независимо от того, вы всегда можете получить и установить значение поля, даже если оно readonly или disabled. Если вы не хотите использовать jQuery's val(), используйте обычный JS.

$(".src").keyup(function(e){ 
    document.getElementsByClassName('target')[0].value = e.target.value; 
}); 

Update: Теперь я думаю, что я понимаю ваш вопрос. Ваша основная цель состоит в том, что вы хотите изменить цвет каретки, спрятав сфокусированное поле и записывая в другое поле. Не уверен, почему вы хотите это сделать, поскольку я заверяю вас, что ваши пользователи не заботятся, и вы рискуете помешать работе с пользователями ... и когда я печатаю это сообщение, я даже не замечаю цвет каретки в Chrome ... buuuut, у меня такое чувство, что вы все еще думаете, что ваши входы более особенные, чем другие. Я чувствую для ваших пользователей, которые пытаются поставить курсор на более раннюю точку ввода, чтобы исправить опечатку ... Я отвлекся.

Вместо 2 входов создайте один вход, установите непрозрачность 0 и записывайте все значение в DIV всякий раз, когда он изменяется. Это имеет много преимуществ:

  1. Вы получаете много поведений поведения по умолчанию для ввода, фактически не нуждаясь в этом (например, курсор на наведении на рабочий стол, навигация на клавиатуре и т. Д.).
  2. Ваша форма все равно может сделать ваниль submit без необходимости копировать значения или любую другую странность javascript.
  3. Любые другие коды, скрипты проверки и т. Д. Не нуждаются в изменении - вход все равно получает значение и испускает все события.

https://jsfiddle.net/2sp92bpy/1/

+0

Эй, спасибо для ответа. Считываемые поля могут получать фокус. Отключенные поля - нет. Я хочу, чтобы иметь возможность копировать значение из источника в цель, а не наоборот. Это та же проблема даже при простой JS. –

+0

А, так когда readonly Ввод A получает фокус, и пользователь начинает вводить текст, вы хотите записать на вход B –

+0

Это верно. –

Смежные вопросы