Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.10.2013, 18:01
Интересующийся
Отправить личное сообщение для Авас Посмотреть профиль Найти все сообщения от Авас
 
Регистрация: 05.10.2013
Сообщений: 19

Чтобы в разных формах вводился разный язык
Как сделать, чтобы, например, если текст вводится в TEXTAREA 1, то он вводится на английском языке, если в TEXTAREA 2 — на русском?
Чтобы человеку, заполняя разные поля, не приходилось переключать язык сочетанием клавиш.
Ответить с цитированием
  #2 (permalink)  
Старый 12.10.2013, 18:10
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

Сообщение от Авас
не приходилось переключать язык
вот здесь похожая задача решалась SyntaxError: invalid range in character class
Но, правильнее было бы, наверное, ограничиться предупреждением (визуальным, звуковым) что текст вводится не в той раскладке и предоставить выбор человеку.
Ответить с цитированием
  #3 (permalink)  
Старый 20.10.2013, 13:17
Интересующийся
Отправить личное сообщение для Авас Посмотреть профиль Найти все сообщения от Авас
 
Регистрация: 05.10.2013
Сообщений: 19

Как бы... выбора у человека-то и не будет — он в любом случае должен будет вводить текст на английском )) Грубо говоря, в одно поле он вводит название товара по-русски (стол), а в следующее поле — по-английски (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?

Последний раз редактировалось Авас, 20.10.2013 в 13:20.
Ответить с цитированием
  #4 (permalink)  
Старый 20.10.2013, 13:43
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

<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>
Ответить с цитированием
  #5 (permalink)  
Старый 20.10.2013, 13:57
Интересующийся
Отправить личное сообщение для Авас Посмотреть профиль Найти все сообщения от Авас
 
Регистрация: 05.10.2013
Сообщений: 19

BETEPAH, а что должно происходить?
В верхнее поле ввожу "стол", в нижнее ввожу "ефиду", но ничего не происходит...
Ответить с цитированием
  #6 (permalink)  
Старый 20.10.2013, 14:04
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

Сообщение от Авас
В верхнее поле ввожу "стол", в нижнее ввожу "ефиду", но ничего не происходит...
именно вводите или вставляете мышкой?
Ответить с цитированием
  #7 (permalink)  
Старый 20.10.2013, 14:07
Интересующийся
Отправить личное сообщение для Авас Посмотреть профиль Найти все сообщения от Авас
 
Регистрация: 05.10.2013
Сообщений: 19

Да, именно печатаю.
Ответить с цитированием
  #8 (permalink)  
Старый 20.10.2013, 14:11
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

Авас, у меня все заменяется
какой браузер? ОС?
Ответить с цитированием
  #9 (permalink)  
Старый 20.10.2013, 14:25
Интересующийся
Отправить личное сообщение для Авас Посмотреть профиль Найти все сообщения от Авас
 
Регистрация: 05.10.2013
Сообщений: 19

Всё! Сорри, сорри! Это я стормозил: когда код к себе скопировал, не поудалял лишних символов. Большое спасибо!!

P.S.: хотя, на этом сайте не работает — во втором поле печатает ефиду (вместо 'table'). Мозилла, Xp.
Ответить с цитированием
  #10 (permalink)  
Старый 24.10.2013, 17:01
Интересующийся
Отправить личное сообщение для Авас Посмотреть профиль Найти все сообщения от Авас
 
Регистрация: 05.10.2013
Сообщений: 19

Столкнулся с двумя багами )
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>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как в dreamweaver сделать чтобы шрифт и ссылки не съезжали на разных разрешениях?? ekstrimalka1 Элементы интерфейса 2 19.09.2011 11:33