Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   А сколько элементов в INPUT'е? (https://javascript.ru/forum/events/8585-skolko-ehlementov-v-input%27e.html)

Эллурн 03.04.2010 08:32

А сколько элементов в INPUT'е?
 
Ситуёвина такая:
Код:

<tr>
	<td align="center"><b><i>Имя новости </i></b></td>
	<td><input name="news_name" id="news_name" maxlength=50 size=50 onfocus="fdinamicdescr(this)" onkeypress="dinamicdescr(this)" onblur="cleardd(this)" descr="Введите заголовок новости. Обязательное поле. У вас осталось символов: "></td>
	<td width=3%>&nbsp </td>
	<td id="news_namedescr" width=33%>&nbsp </td>
</tr>

И таких полей для ввода три (имя ячейки таблицы после каждого поля равно имя поля+descr)

Вот это у меня происходит по событию onKeypress:
Код:

function dinamicdescr(myself) {
                descfield = myself.name+"descr"
		maxlength=myself.getAttribute("maxlength")
		element=document.getElementById(descfield)
		m=maxlength-myself.value.length
		element.innerHTML=myself.getAttribute("descr")+m
        }

Можете попробовать сами, код оригинальностью не пахнет. Тогда увидите, что происходит следующее: при первом нажатии на кнопку внутри поля ввода, в ячейке таблицы рядом с ним никаких изменений не происходит. Как было, в данном случае - 50, так и осталось. Если же стереть введенный символ, то получится 49!!! Другими словами, реализация подсчета на экране запаздывает всегда на 1 символ. Подскажите, пожалуйста, как можно пофиксить этот баг? :)

Octane 03.04.2010 09:48

Цитата:

Сообщение от Эллурн
А сколько элементов в INPUT'е?

В input'е элементов быть не может! Пишите, пожалуйста, информативные названия тем.

Цитата:

Сообщение от Эллурн
запаздывает всегда на 1 символ. Подскажите, пожалуйста, как можно пофиксить этот баг?

onkeyup и onchange. Или проверять через некоторый промежуток времени (setTimeout).

Эллурн 04.04.2010 17:23

Извини, не элементов в INPUT'e, а символов в input.values)))

И спасибо за ответ =)

rsod 04.04.2010 21:16

да, onkeyup в связке с keypress надо использовать. Кстати, код не очень оптимизирован, я бы посоветовал примерно такой вариант:
<input type="text" name="elem1" onkeypress="checkLength(this);" onkeyup="checkLength(this);"><span id="elem1_lth"></span>
<script>
function checkLength(e){
document.getElementById(e.name+'_lth').innerHTML = (typeof e.maxlength == 'undefined')?e.value.length:e.maxlength-e.value.length;
}
</script>

а ещё лучше присваивать event-ы яваскриптом

Эллурн 04.04.2010 22:59

Цитата:

Сообщение от rsod (Сообщение 50078)
а ещё лучше присваивать event-ы яваскриптом

Встречал что-то подобное несколько раз, но не смог найти целиком описание, что это, как и зачем. В лсновном - просто потому, что не знаю, что надо искать :) Можно рассказать подробнее или дат ссылочку?

B~Vladi 05.04.2010 10:08

http://javascript.ru/tutorial/events


Часовой пояс GMT +3, время: 03:45.