С JS или Jquery. Возможно ли иметь поле только для чтения, которое отображается с маской, но без маски при копировании?

У меня есть форма генератора кода, в которой есть 2 текстовых поля. Первый принимает 12-значный код, затем при нажатии кнопки запускает этот код через алгоритм и выдает 12-значный ключ. Я хотел бы (для обоих полей на самом деле), чтобы данные вводились с маской, но если они были выбраны и скопированы, это была строка чисел.

Например:

Пользователь вводит в текстовое поле: 123456789012 Маска отображает ввод в поле как: 1234-5678-9012 Пользователь нажимает кнопку генерации Текст во втором текстовом поле (только для чтения) отображает код возврата как: 5798-1521 -4886 Когда пользователь копирует это второе текстовое поле и вставляет его в блокнот, значение: 579815214886

Это возможно? Я покопался в нескольких плагинах для масок JQuery, но все они копируют/вставляют данные маски, все еще находящиеся в строке. Единственное, о чем я могу думать, это то, что когда поле получает фокус, чтобы удалить маску, но когда оно теряет фокус, чтобы применить маску. Есть ли способ лучше?

Спасибо за помощь.


person mvanella    schedule 10.07.2013    source источник
comment
Вы можете привязать события копирования и вставки к входу.   -  person gustavodidomenico    schedule 10.07.2013
comment
@gustavodidomenico Не имеет значения. К моменту возникновения события copy текст уже скопирован, и вы не можете его изменить. И paste тут ни при чем   -  person Ian    schedule 10.07.2013
comment
Просто не согласен с вами.   -  person gustavodidomenico    schedule 10.07.2013


Ответы (2)


Я решил это, удалив маску при отправке формы. Также удаление маски при получении фокуса и применение маски при потере фокуса.

person mvanella    schedule 16.07.2013

На самом деле у меня есть доступ только к браузеру IE.

Сначала простое поле ввода:

<input type="text" id="field" />

Во-вторых, привязка события копирования (используйте on в более поздних версиях jQuery вместо bind):

$(function() {
    $("#field").bind("copy", function (e) { window.clipboardData.setData("Text", "MyCustomText"); });
});

Когда вы копируете текст внутри ввода, «MyCustomText» будет помещен в данные буфера обмена. Вы можете заменить это значением, которое вы хотите для поля без маски.

person gustavodidomenico    schedule 10.07.2013
comment
Только что попробовал этот кусок кода. Я использую последнюю версию jQuery, поэтому я изменил привязку на on, изменил #field на #overrideCode и попробовал жестко закодированное значение для MyCustomText как бла-бла-бла. Если я вас понимаю, тогда я смогу скопировать значение из текстового поля с id=overrideCode и вставить его со значением blahblahblah. Пока у меня нет такого результата. - person mvanella; 11.07.2013
comment
Вы используете Internet Explorer? - person gustavodidomenico; 11.07.2013