Показать сообщение отдельно
  #1 (permalink)  
Старый 27.07.2012, 23:31
Аватар для Demath
Профессор
Отправить личное сообщение для Demath Посмотреть профиль Найти все сообщения от Demath
 
Регистрация: 22.06.2012
Сообщений: 168

Исправление раскладки клавиатуры в заданной области textarea
Подскажите, пожалуйста, как вызвать функцию (исправление раскладки Ru->En) в заданной области <textarea>?
Граница области задаётся окаймляющей парой: [math],[/math]. То есть нужно, чтобы функция вызывалась только, когда курсор находится между [math] и [/math].

С исправлением раскладки во всей <textarea> почти нет проблем (не пашет в IE)

<!DOCTYPE html>
<html>
<head>
<meta http-equiv=content-type content="text/html; charset=utf-8">

<script type=text/javascript>
String.prototype.reverseRuEnLayout = (function()
{
    var L = {'А':'F','а':'f','Б':'<','б':'\,','В':'D','в':'d','Г':'U','г':'u',
             'Д':'L','д':'l','Е':'T','е':'t','Ё':'~','ё':'`','Ж':';','ж':';',
             'З':'P','з':'p','И':'B','и':'b','Й':'Q','й':'q','К':'R','к':'r',
             'Л':'K','л':'k','М':'V','м':'v','Н':'Y','н':'y','О':'J','о':'j',
             'П':'G','п':'g','Р':'H','р':'h','С':'C','с':'c','Т':'N','т':'n',
             'У':'E','у':'e','Ф':'A','ф':'a','Х':'{','х':'[','Ц':'W','ц':'w',
             'Ч':'X','ч':'x','Ш':'I','ш':'i','Щ':'O','щ':'o','Ъ':'}','ъ':']',
             'Ы':'S','ы':'s','Ь':'M','ь':'m','Э':'\'','э':'\'','Ю':'>','ю':'\.',
             'Я':'Z','я':'z','/':'|',':':'^','?':'&'  //некоторые символы специально не учтены
            },
        r = '', k;
    for (k in L) r += k;
    r = new RegExp('[' + r + ']', 'g');
    k = function(a){return a in L ? L[a] : '';};

    return function() {return this.replace(r, k);
    onpropertychange="document.getElementById('abcd').value = this.value.reverseRuEnLayout()"     
    };
})();
</script>

</head>
<body>
<textarea style="margin-left: 50px; width: 400px; height: 100px;" id="abcd"
          oninput="document.getElementById('abcd').value = this.value.reverseRuEnLayout()">
</textarea>
</body>
</html>

Нашел на этом форуме, как получить курсор в textarea, но использовать это не получается.

Последний раз редактировалось Demath, 28.07.2012 в 23:21.
Ответить с цитированием