Чтобы в разных формах вводился разный язык
Как сделать, чтобы, например, если текст вводится в TEXTAREA 1, то он вводится на английском языке, если в TEXTAREA 2 — на русском?
Чтобы человеку, заполняя разные поля, не приходилось переключать язык сочетанием клавиш. |
Цитата:
Но, правильнее было бы, наверное, ограничиться предупреждением (визуальным, звуковым) что текст вводится не в той раскладке и предоставить выбор человеку. |
Как бы... выбора у человека-то и не будет — он в любом случае должен будет вводить текст на английском )) Грубо говоря, в одно поле он вводит название товара по-русски (стол), а в следующее поле — по-английски (table).
Мне понравился вот это Ваш скрипт: function toggleEncoding(txt) { var rus = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя"; var eng = "f,dult`;pbqrkvyjghcnea[wxio]sm'.z"; if(txt.search(/[а-яА-Я]/i) > -1) var from = rus, to = eng; else var from = eng, to = rus; txt = txt.split(''); for (var i = 0; i < txt.length; i++) { console.log(from.indexOf(txt[i])); txt[i] = to.charAt(from.indexOf(txt[i])) || txt[i]; } txt = txt.join(''); alert(txt); } toggleEncoding('тест'); toggleEncoding('ntcn'); Но что-то я никак не могу понять, как прикрутить его к textarea. Скажем, человек вводит текст в textarea ('ефиду'), щёлкает мышкой по полю и текст автоматически "переводится" на английский ('table') или наоборот. Т.е. как применить эту функцию к тексту в поле textarea? |
<div>русский текст<br /> <textarea onkeyup="this.value = toggleEncoding(this.value, 'ru')"></textarea></div> <div>английский текст<br /> <textarea onkeyup="this.value = toggleEncoding(this.value, 'en')"></textarea></div> <script> function toggleEncoding(txt, lang) { lang = lang || 'en'; var rus = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя"; var eng = "f,dult`;pbqrkvyjghcnea[wxio]sm'.z"; if(lang == 'en') var from = rus, to = eng; else if(lang == 'ru') var from = eng, to = rus; else return txt; txt = txt.split(''); for (var i = 0; i < txt.length; i++) { txt[i] = to.charAt(from.indexOf(txt[i])) || txt[i]; } txt = txt.join(''); return txt; } </script> |
BETEPAH, а что должно происходить?
В верхнее поле ввожу "стол", в нижнее ввожу "ефиду", но ничего не происходит... |
Цитата:
|
Да, именно печатаю.
|
Авас, у меня все заменяется
какой браузер? ОС? |
Всё! Сорри, сорри! Это я стормозил: когда код к себе скопировал, не поудалял лишних символов. Большое спасибо!!
P.S.: хотя, на этом сайте не работает — во втором поле печатает ефиду (вместо 'table'). Мозилла, Xp. |
Столкнулся с двумя багами )
1. Если в textarea уже есть текст и нужно дописать что-то в середине, то скрипт заменяет введённую букву и переводит курсор в конец строки. 2. Если хочешь вставить запятую, то он меняет её на "б"; причём, если указать, чтобы он менял "?" на ",", то скрипт всё равно заменит его на "б", т.к. он сначала заменит "?" на ",", а потом "," на "б". Нашёл решение, где их избежали (правда там только рус -> en, но не суть важно). Но опять столкнулся с проблемой: как переделать из getElementById в getElementsByClassName. Пробовал сделать по аналогии с тем примером, но не вышло. А как нужно? Было: function correctLayoutInTag(text,cursor) { text = document.getElementById('abcd'); cursor = getCaret(document.getElementById('abcd')); translit = function(text) { return correctLayout(text)} text.value = text.value.replace(text.value, translit); setCaretToPos(text, cursor); } <textarea style="width:400px; height:150px;" id="abcd" onkeyup="correctLayoutInTag()">текст</textarea> Мои танцы с бубном: function correctLayoutInTag(text,cursor) { var text = document.getElementsByClassName('en'); for (var i = 0; i < text.length; i++) { var texten = text[i]; }; var cursor = getCaret(document.getElementsByClassName('en')); for (var i = 0; i < cursor.length; i++) { var cursoren = cursor[i]; }; var translit = function(texten) {return correctLayout(texten)} texten.value = texten.value.replace(texten.value, translit); setCaretToPos(texten, cursoren); }; <textarea style="width:400px; height:150px;" class="en" onkeyup="correctLayoutInTag()">текст</textarea> <textarea style="width:400px; height:150px;" class="en" onkeyup="correctLayoutInTag()">текст</textarea> |
Часовой пояс GMT +3, время: 08:55. |