У меня есть приложение jsf 2.0, в котором у меня есть текстовое поле ввода и число символов слева от счетчика внизу текстового поля ввода, которое я обновляю через javascript.inputTextArea потери фокуса в IE8
<h:inputTextarea class="myInputTextClass"
value="#{bean.text}"
style="resize: none;width:445px;" type="text"
maxlength="255" cols="60" rows="3"
onfocus="countChars($('.myInputTextClass'),255)"
onkeyup="countChars($('.myInputTextClass'),255);"
onkeydown="countChars($('.myInputTextClass'),255);"
/>
<span id="char_count" style="font-style:italic;margin-left:-14px">255</span>
Сценарий:
function countChars(element, max) {
calculateCount(element.val().length, max);
if (element.val().length > max) {
element.val(element.val().substring(0, max));
}
}
function calculateCount(length, max){
var count = max - length;
if(count < 0){
count = 0;
}
document.getElementById('char_count').innerHTML = count ;
}
Проблема заключается после ввода где-то около 150 символов в текстовом поле ввода, фокус смещается назад к верхней части inputtextbox. Однако курсор остается в конце, как ожидалось.
Я пробовал использовать положение scrollTop и фокус, но не работал. Любое предложение высоко ценится.
Эта проблема возникает только в IE8, в forefox она отлично работает.
Просто из любопытства, зачем вызывать функцию countChars на трех разных событиях? Почему бы просто не называть его ключом? Вы пробовали только один? Поведение другое? – Revent
Да, мне нужно называть его фокусом и клавишей вверх/вниз, потому что если пользователь пытается отредактировать существующий входной текст, счет нужно обновить сразу, а также на каждом входе персонажа счет должен быть обновлен. Я устал звонить только один раз, но не повезло. комментарий ниже строки заставляет его работать, но мне нужно это иметь. document.getElementById ('char_count'). innerHTML = count; – Vallikranth
Кстати, не уверен, что эта строка только html-кодирована в вашем вопросе, но if (count < 0) {может быть проблемой, если у вас есть объект html для символа меньше, чем в JS ... – Revent