Javascript-форум (https://javascript.ru/forum/)
-   Internet Explorer (https://javascript.ru/forum/css-html-internet-explorer/)
-   -   тормозит в IE (https://javascript.ru/forum/css-html-internet-explorer/4259-tormozit-v-ie.html)

olgatcpip 06.07.2009 21:35

тормозит в IE
 
Здравствуйте, у меня тормозит ввод текста в ИЕ

Есть текст, который отображается. перед отображением на каждое слово накладываем событие (по клику делать то-то)

есть поле вода, в которое мы что-нибудь можем ввести (<input type="text" name="buyUserText" />)
есть место, куда мы вставляем количество символов введённых в поле ввода (<font id="char_counter">0</font>)
Вводим количество символов по событию
window.onload = function(){
	var v = document.getElementById('buyUserText'); 
	v.onkeyup = function()
	{
		charCount();
	}
}


function charCount()
{
   var c = document.getElementById('char_counter');
   var v = document.getElementById('buyUserText'); 
  c.innerText = v.value.length;
}


вот так работает НО если текста много то ТОЛЬКО в IE тормозит страшно c.innerText!

И что я только не пробовала. И чере дом элементы вставлять и менять местами вызовы функций (это от отчаяния)! :cray:

Помогите пожалуйста.

Я думаю, что это из-за механизма обработки событий IE браузером так. Но алгоритм по которому он так делает я не знаю.

ТОрмозит явно из-за огромного текста (чем больше текст, тем больше тормозит)

Как обойти? приму любые предложения. Сочувствие тоже приму.

Спасибо

Riim 06.07.2009 23:30

При сколки символах тормозит?
Какой IE?

olgatcpip 07.07.2009 05:37

ie 7
12574 сим достаточно заметно тормозит.

Riim 07.07.2009 12:05

У меня заметно тормозить начинает примерно при 500000. Для оптимизации можно вычислять элементы по id один раз и запоминать замыканием:
window.onload = function(){
	var v = document.getElementById('buyUserText'),
		c = document.getElementById('char_counter');
	v.onkeyup = function() {
		charCount(v, c);
	};
};

function charCount(v, c) {
	c.innerHTML = v.value.length;
}


Можно попробовать вместо innerText/innerHTML использовать nodeValue у первого текстового узла в char_counter. Только нужно не забыть создать его при onload. Можно charCount вызывать через нулевой timeout: http://javascript.ru/tutorial/events/timing.

Но толку от всей этой оптимизации никакого (у меня, по крайней мере), т. к. даже если убрать весь javascript, то тормозить меньше не становится. Тестировал еще в Chrome. Для input-а также никаких изменений, а вот для textarea очень неплохое улучшение.

olgatcpip 07.07.2009 19:33

К сожалению не помогло. там как раз из-за того, что на каждое слово событие повешано.
Скажу по секрету что это за сайт
toop.ru

зарегиться надо под покупателя, и попытаться купить ссылки. на этих этапах вам деньги не понадобятся, но увидите что за скрипт там такой.

Посмотрите. Мне кажется это именно из-за того, как ie обрабатывает события. если это не так, скажите, пожалуйста.

Riim 07.07.2009 23:55

Не уверен что куда надо попал, много текста добавить не получается т. к. maxlength установлен и количество символов считается не от value.length , а просто увеличивается при нажатии клавиш. Даже если нажимать delete, то все равно увеличивается. И ошибки еще были:

olgatcpip 08.07.2009 00:29

простите. это я так химичила.... сейчас уже прекратила.
я пробовала разнык варианты... не важно. сейчас уже не буду доделывать. вернула в более менее правильный вариант.


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