Вход

Просмотр полной версии : не назначается bind после unbind


constantant
14.09.2009, 12:50
В общем смысл скрипта такой: имеется див с классом .unlock при клике на него отменяются обработчики события для определённых классов, а сам элемент меняет класс на .lock. А клике снова на тот же элемент но с классом .lock - назначаются обработчики тем элементам с которых они были сняты.
делаю я это следующим образом (может не правильно):
function add_events(){
$('.e').bind('click',ex)
$('.ifp').bind('mouseover',movf)
$('.ifp').bind('mouseout',motf)
$('.ifp').bind('mouseup',muf)
$('.om:has(~.ulc)').bind('mouseover',movo)
$('.om:has(~.ulc)').bind('mouseout',moto)
$('.om:has(~.ulc)').bind('mousedown',mdno)
$('.om:has(~.ulc)').bind('mouseup',muo)
$('.no:has(~.ulc)').bind('click',act)
$('.hd:has(~.ulc)').bind('click',hd)
$('.uhd:has(~.ulc)').bind('click',hd)
$('.ulc').click(function(){
$(this).toggleClass('ulc').toggleClass('lc')
$('.om:has(~.lc)').unbind('mouseover',movo)
$('.om:has(~.lc)').unbind('mouseout',moto)
$('.om:has(~.lc)').unbind('mousedown',mdno)
$('.om:has(~.lc)').unbind('mouseup',muo)
$('.no:has(~.lc)').unbind('click',act)
$('.hd:has(~.lc)').unbind('click',hd)
$('.uhd:has(~.lc)').unbind('click',hd)
})
$('.lc').click(function(){
$(this).toggleClass('ulc').toggleClass('lc')
$('.om:has(~.ulc)').bind('mouseover',movo)
$('.om:has(~.ulc)').bind('mouseout',moto)
$('.om:has(~.ulc)').bind('mousedown',mdno)
$('.om:has(~.ulc)').bind('mouseup',muo)
$('.no:has(~.ulc)').bind('click',act)
$('.hd:has(~.ulc)').bind('click',hd)
$('.uhd:has(~.ulc)').bind('click',hd)
})
}
так вот unbind работает, а bind - нет :(

Octane
14.09.2009, 13:13
Что за тильда перед классом ucl? Код ужасный, читайте доки по jQuery.

constantant
14.09.2009, 13:17
Что за тильда перед классом ucl?
в общем .om:has(~.ulc) означает: элемент с классом .om имеющий брата с классом .ulc
разве не так надо? если нет, то как?

constantant
14.09.2009, 14:02
проблему решил)

e1f
14.09.2009, 18:42
в общем .om:has(~.ulc) означает: элемент с классом .om имеющий брата с классом .ulc
разве не так надо? если нет, то как?
Не так. '.om ~ .ulc' -- так

constantant
15.09.2009, 08:02
Не так. '.om ~ .ulc' -- так

из описания:
siblings(prev, siblings)
Matches all sibling elements after the "prev" element that match the filtering "siblings" selector.
а у меня .ulc стоит после .om, так что конструкция '.om ~ .ulc' не работает, а моя работает :)

e1f
15.09.2009, 13:21
Ага. Да, тогда так работает. Правда, хорошо бы потестить производительнось Sizzle на таких специфических селекторах.

constantant
15.09.2009, 13:59
хорошо бы потестить производительнось Sizzle на таких специфических селекторах
лучше задать это вопрос непосредственно в jQuery (http://docs.jquery.com/Discussion) или Sizzle (http://github.com/jeresig/sizzle/commits/) :)