


События. Разгоняем jQuery. Практическое приложение. Оптимизация структуры веб-страниц
Кэш
События
Множественные события
Иногда возникает необходимость повесить одно и то же действие на несколько событий, это приводит к созданию новых функций либо к копи-пасте. Этого легко можно избежать. Например, нужно задать размер дива при загрузке и изменять его при изменении размеров окна.
$(window).bind("resize load",null,function(){
$("#id").css({width:document.clientWidth})
});
Только при этом не забываем, что поведение IE8 не соответствует стандартам, и при загрузке страницы сначала происходит событие resize, а только потом load.
То же самое корректно и в обратную сторону.
$(window).unbind("resize load");
Но это не работает в версии 1.2.6, точнее это работает только с именованными функциями, а с анонимными не работает, их надо удалять по одной.
Одно событие на много элементов
Если случается повесить события на длинный список.
var ul = $("<ul/>");
for(var i=0,j=1000;i<j;i++)
$("<li>"+i+"</li>").click(function(e){
alert(this.innerHTML);
}).appendTo(ul);
ul.appendTo("body");
То в результате мы будем иметь 1000 одинаковых обработчиков событий, вряд ли это добавит скорости вашей странице, поэтому можно воспользоваться маленькой хитростью и повесить всего один обработчик на родительский элемент.
var str = "";
for(var i=0,j=1000;i<j;i++)
str += "<li>"+i+"</li>";
$("<ul/>")
.append(str)
.click(function(e){
alert(e.target.innerHTML);
})
.appendTo("body");