Цитата:
С выделением не легче (может чуть-чуть), чем с переключением раскладки. К тому же, пользователю нужно видеть в процессе ввода, что он вводит. Я так понимаю, что проблема связана с событием onKeyUp? |
Вот получилось (не без помощи) исправлять раскладку клавиатуры с Ru на En внутри тегов [ math][/math ] в textarea во время ввода (событие OnKeyUp), при этом каретка не переносится в конец строки после каждого нажатия клавиши внутри [ math][/math ].
Но раскладка клавиатуры корректируется только в первом вхождении [ math][/math ], в последующих не изменяется :( Подскажите, как это исправить. <textarea style="width: 450px; height: 140px" id="abcd" onkeyup="correctInTag (this)"> Наберите что-либо на русском внутри [ math][/math ]. Но внутри второй пары [ math][/math ] и всех последующих раскладка не корректируется. </textarea> <script type="text/javascript"> function correctInTag (t) { if ((/[а-я]/i).exec (t.value.split ('[ math]') [1].split ('[/math ]') [0]) == null) return; var cyr = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯабвгдеёжзийклмнопрстуфхцчшщьыъэюя', klv = 'F<DULT~:PBQRKVYJGHCNEA{WXIOMS}">Zf,dult`;pbqrkvyjghcnea[wxioms]\'.z'; if (document.selection) {t.focus (); var rng = document.selection.createRange (); rng.moveEnd ('character', -1); rng.moveEnd ('character', 1); rng.text = klv.charAt (cyr.indexOf (rng.text)); } else if (t.selectionStart >= 0) {var s = t.selectionStart - 1; t.value = t.value.substr (0, s) + klv.charAt (cyr.indexOf (t.value.substr (s, 1))) + t.value.substr (s + 1); t.selectionStart = t.selectionEnd = s + 1; } } </script> |
Цитата:
тогда у Вас массив - его и обрабатываете через свою функцию correctInTag |
Цитата:
|
Demath,
Занчит рекурсия через replace http://javascript.ru/basic/regular-e...herez-funkciyu Делаете парс с помощью replace и вызываемой функцией и делаете замену - подстановку каждого вхождения |
Цитата:
Пытаюсь по всякому, но не получается :( |
Demath,
Выложите чисто считанную полную строку вместе с тегами вставленного обрамления [match] и восклицалом отметьте место текущего положения курсора |
Спасибо за подсказки! Кажется, получилось во всех вхождениях тега [math].[/math] корректировать раскладку клавиатуры.
<script type="text/javascript"> function correctInTag(t) { for (var z = t.value.split('[math]'), f = 0, j = 1, lj = z.length; j < lj; j++) { if (new RegExp('[а-яё]', 'i').exec(z[j].split('[/math]')[0]) != null) {f = 1; break} } if (!f) return; var cyr = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯабвгдеёжзийклмнопрстуфхцчшщьыъэюя', klv = 'F<DULT~:PBQRKVYJGHCNEA{WXIOMS}">Zf,dult`;pbqrkvyjghcnea[wxioms]\'.z'; if (document.selection) { t.focus(); var rng = document.selection.createRange(); rng.moveEnd('character', -1); rng.moveEnd('character', 1); rng.text = klv.charAt(cyr.indexOf(rng.text)); } else if (t.selectionStart >= 0) { var s = t.selectionStart - 1; t.value = t.value.substr(0, s) + klv.charAt(cyr.indexOf(t.value.substr(s, 1))) + t.value.substr(s + 1); t.selectionStart = t.selectionEnd = s + 1; } } </script> <textarea id="abcd" onkeyup="correctInTag(this)" style="width: 300px; height: 100px"> Наберите что-либо на русском внутри [math].[/math]. И в этом [math].[/math]. </textarea> |
Demath,
:-E криво работает в опере еще и селект строк добавляет - приходится гасить... и рекурсия медленная - при большой скорости набора - убивает теги обрамлений Всё нун делать несколько иначе |
Цитата:
Цитата:
|
Часовой пояс GMT +3, время: 06:38. |