Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 24.10.2013, 17:59
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

В восьмой строке функция ожидает принять ссылку на элемент, а вы подсовываете ей массив из ссылок на элементы с классом 'en'
Цикл в 4-6 строках что должен делать по-вашему? У вас получится, что в texten останется ссылка на последний ".en"

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

var cursor = document.getElementsByClassName('en');
	     for (var i = 0; i < cursor.length; i++) {
		  var cursoren = getCaret(cursor[i]);
	    };

Так?

Сообщение от BETEPAH Посмотреть сообщение
Цикл в 4-6 строках что должен делать по-вашему? У вас получится, что в texten останется ссылка на последний ".en"
Я думал, что эти циклы присвоят переменным texten и cursoren ссылки на элементы...

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

Сообщение от Авас
Так?
по-любому не так. Попробуйте сами в уме прокрутить этот цикл. Давайте вместе:
1 строка - собираем в массив все ".эн". Допустим их два было.
запускаем дальше цикл. Первый виток цикла - получаем каретку первого поля, сохраняем ее в cursoren. Второй виток цикла - что мы делаем? Правильно, перезаписываем результат первого витка. Получается, что даром мы в предыдущий раз определяли картетку?
Надеюсь, понятно объяснил?
Ответить с цитированием
  #14 (permalink)  
Старый 24.10.2013, 22:52
Интересующийся
Отправить личное сообщение для Авас Посмотреть профиль Найти все сообщения от Авас
 
Регистрация: 05.10.2013
Сообщений: 19

Да... понятно...

Мне кажется, что вот это уже ближе )), но я не знаю, как присвоить переменным text и cursor значения из поля (там, где у меня ???):
var elements = document.getElementsByClassName('en'); {
for (var i = 0; i < elements.length; i++) {

	elements[i] = function correctLayoutInTag(text,cursor) {
	    var text = ???;
        var cursor = getCaret(???); 
	    var translit = function(text) {return correctLayout(text)}
	    text.value = text.value.replace(text.value, translit);
	    setCaretToPos(text, cursor);
	 
	};
	
	};
  };
Ответить с цитированием
  #15 (permalink)  
Старый 25.10.2013, 09:11
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

пятая и шестая строка в этом коде должна находиться выше объявления функции, насколько я понимаю. К тому же зачем ссылки на элементы в массиве перезаписывать функциями? не понятно, чего вы пытаетесь добиться.
По-моему, вы пытаетесь решить надуманную задачу. Почему бы вам не определять, в какой текстарее вызывается скрипт, через this? И не нужно будет тогда этой свистопляски с массивами и прочим
Ответить с цитированием
  #16 (permalink)  
Старый 09.11.2013, 19:56
Интересующийся
Отправить личное сообщение для Авас Посмотреть профиль Найти все сообщения от Авас
 
Регистрация: 05.10.2013
Сообщений: 19

В общем, вот рабочая версия:
<html><head><title>Transliteration</title><meta charset="cp1251" />
<script type="text/javascript">
//Получение позиции каретки в textarea
function getCaret(el)
{   if (el.selectionStart) {return el.selectionStart;} 
    else if (document.selection)
             { el.focus(); 
               var r = document.selection.createRange(); 
               if (r == null) {return 0;} 
               var re = el.createTextRange(), 
                   rc = re.duplicate(); 
               re.moveToBookmark(r.getBookmark()); 
               rc.setEndPoint('EndToStart', re); 
               return rc.text.length; 
             }  
    return 0; 
}
 
//Задание позиции каретки в textarea
function setSelectionRange(input, selectionStart, selectionEnd)
{
    if (input.setSelectionRange)
       { input.focus();
         input.setSelectionRange(selectionStart, selectionEnd);
       }
    else if (input.createTextRange)
            { var range = input.createTextRange();
              range.collapse(true);
              range.moveEnd('character', selectionEnd);
              range.moveStart('character', selectionStart);
              range.select();
            }
}
function setCaretToPos(input, pos) {setSelectionRange(input, pos, pos);}
 
//Транслитерация с русского на английский
function correctLayoutRusToEn(text){
    if (typeof(text)=="undefined") return null;
 var transl=new Array();
    transl['А']='F'; transl['а']='f';  transl['Б']='<';  transl['б']='\,'; transl['В']='D';  transl['в']='d';
    transl['Г']='U'; transl['г']='u'; transl['Д']='L'; transl['д']='l'; transl['Е']='T'; transl['е']='t';
    transl['Ё']='~'; transl['ё']='~'; transl['Ж']=';'; transl['ж']=';'; transl['З']='P'; transl['з']='p';
    transl['И']='B'; transl['и']='b'; transl['Й']='Q'; transl['й']='q'; transl['К']='R'; transl['к']='r';
    transl['Л']='K'; transl['л']='k'; transl['М']='V'; transl['м']='v'; transl['Н']='Y'; transl['н']='y';
    transl['О']='J'; transl['о']='j'; transl['П']='G'; transl['п']='g'; transl['Р']='H'; transl['р']='h';
    transl['С']='C'; transl['с']='c'; transl['Т']='N'; transl['т']='n'; transl['У']='E'; transl['у']='e';
    transl['Ф']='A'; transl['ф']='a'; transl['Х']='{'; transl['х']='['; transl['Ц']='W'; transl['ц']='w';
    transl['Ч']='X'; transl['ч']='x'; transl['Ш']='I'; transl['ш']='i'; transl['Щ']='O'; transl['щ']='o';
    transl['Ъ']='}'; transl['ъ']=']'; transl['Ы']='S'; transl['ы']='s'; transl['Ь']='M'; transl['ь']='m';
    transl['Э']='\"'; transl['э']='\''; transl['Ю']='>'; transl['ю']='\.'; transl['Я']='Z'; transl['я']='z'; 
    transl[':']='^'; transl['/']='|'; transl['?']='&';
    var result='';
    for(i=0; i<text.length; i++)
       { if(transl[text.charAt(i)]!=undefined) {result+=transl[text.charAt(i)]}
         else {result+=text.charAt(i)}}
    return result;
};
 
//Транслитерация с английского на русский
function correctLayoutEnToRus(text){
    if (typeof(text)=="undefined") return null;
 var transl=new Array();
    transl['F']='А'; transl['f']='а';  transl['<']='Б';  transl['\,']='б'; transl['D']='В';  transl['d']='в';
    transl['U']='Г'; transl['u']='г'; transl['L']='Д'; transl['l']='д'; transl['T']='Е'; transl['t']='е';
    transl['~']='Ё'; transl['~']='ё'; transl[';']='Ж'; transl[';']='ж'; transl['P']='З'; transl['p']='з';
    transl['B']='И'; transl['b']='и'; transl['Q']='Й'; transl['q']='й'; transl['R']='К'; transl['r']='к';
    transl['K']='Л'; transl['k']='л'; transl['V']='М'; transl['v']='м'; transl['Y']='Н'; transl['y']='н';
    transl['J']='О'; transl['j']='о'; transl['G']='П'; transl['g']='п'; transl['H']='Р'; transl['h']='р';
    transl['C']='С'; transl['c']='с'; transl['N']='Т'; transl['n']='т'; transl['E']='У'; transl['e']='у';
    transl['A']='Ф'; transl['a']='ф'; transl['{']='Х'; transl['[']='х'; transl['W']='Ц'; transl['w']='ц';
    transl['X']='Ч'; transl['x']='ч'; transl['I']='Ш'; transl['i']='ш'; transl['O']='Щ'; transl['o']='щ';
    transl['}']='Ъ'; transl[']']='ъ'; transl['S']='Ы'; transl['s']='ы'; transl['M']='Ь'; transl['m']='ь';
    transl['\"']='Э'; transl['\'']='э'; transl['>']='Ю'; transl['\.']='ю'; transl['Z']='Я'; transl['z']='я'; 
    transl['^']=':'; transl['/']='|'; transl['&']='?';
    var result='';
    for(i=0; i<text.length; i++)
       { if(transl[text.charAt(i)]!=undefined) {result+=transl[text.charAt(i)]}
         else {result+=text.charAt(i)}}
    return result;
};

window.onload = function() {
var elements = document.getElementsByClassName("en");
	for (var i = 0; i < elements.length; i++) {
		elements[i].onkeyup = function correctLayoutInTag(text,cursor)
		{
		text = this;
		cursor = getCaret(text);
		translit = function (text) { return correctLayoutRusToEn(text)}
		text.value = text.value.replace(text.value, translit);
		setCaretToPos(text, cursor);
		};
	};
var elements = document.getElementsByClassName("rus");
	for (var i = 0; i < elements.length; i++) {
		elements[i].onkeyup = function correctLayoutInTag(text,cursor)
		{
		text = this;
		cursor = getCaret(text);
		translit = function (text) { return correctLayoutEnToRus(text)}
		text.value = text.value.replace(text.value, translit);
		setCaretToPos(text, cursor);
		};
	};
};
</script>
</head>
<body style="padding-left: 100px;">
<textarea style="width:400px; height:150px;" PLACEHOLDER="Транслитерирует с английского на русский" class="rus"></textarea>
<textarea style="width:400px; height:150px;" PLACEHOLDER="Транслитерирует с русского на английкий" class="en"></textarea><br>
<textarea style="width:400px; height:150px;" PLACEHOLDER="Транслитерирует с английского на русский" class="rus"></textarea>
<textarea style="width:400px; height:150px;" PLACEHOLDER="Транслитерирует с русского на английкий" class="en"></textarea>
</body>
</html>

P.S.: на основе скрипта транслитерации осюда: http://www.cyberforum.ru/post3540293.html
Ответить с цитированием
Ответ



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

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


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