Цитата:
С выделением не легче (может чуть-чуть), чем с переключением раскладки. К тому же, пользователю нужно видеть в процессе ввода, что он вводит. Я так понимаю, что проблема связана с событием 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, время: 21:05. |