отменить привязку клика, но сохранить eventPreventDefault();

Я пытаюсь отменить привязку щелчка к анимации до тех пор, пока анимация не завершится, чтобы предотвратить перекрытие анимации. Отвязка работает нормально, но, конечно, тогда перестает работать event.preventDefault и моя кнопка/ссылка снова становится активной. Я не уверен, как обойти это.

Сокращенная версия кода:

$('a.Next').bind('click', SlideFwd);
function SlideFwd(e){
    e.preventDefault();
    $('a.Next').unbind();
    $('ul.GridviewList').animate({
        left: '-=800px'
        }, 'slow', function() {
        $('a.Next').bind('click', SlideFwd);    
    });
};

и html:

<div>

    <div class="SlideControl">
        <p class="Pages"><span class="ProdCountDisplay">#</span> of <span class="ProdCountTotal">10</span></p>
        <ul>
            <li><a class="Disabled button_Back Previous" href="#">Prev</a></li>
            <li><a class="button_Next Next" href="#">Next</a></li>
        </ul>
    </div>
    <ul class="GridviewList">
        <li class="ProdWrap">This is a slider space 1</li>
        <li class="ProdWrap"> This is a slider space 2</li>
        <li class="ProdWrap"> This is a slider space 3</li>
        <li class="ProdWrap"> This is a slider space 4</li>
        <li class="ProdWrap"> This is a slider space 5 </li>
        <li class="ProdWrap">This is a slider space 6 </li>
        <li class="ProdWrap"> This is a slider space 7</li>
        <li class="ProdWrap"> This is a slider space 8 </li>
        <li class="ProdWrap"> This is a slider space 9 </li>
        <li class="ProdWrap"> This is a slider space 10 </li>
    </ul> <!-- ul.Gridviewlist -->
</div> 

Полная рабочая версия находится здесь: http://iwrb.idleprattle.com/Slider.htm ( только у следующего сейчас настроена отвязка/привязка)

Я также пытался использовать preventDefault за пределами функции SlideFwd, но он также должен отменить привязку. т.е.

$('a.Next').click(function(){e.preventDefault();});

person Tami    schedule 29.04.2011    source источник


Ответы (2)


Вы можете сделать это:

$('a.Next').bind('click', SlideFwd);

...

$('a.Next').unbind().bind('click',function(e){e.preventDefault();});

...

$('a.Next').unbind().bind('click', SlideFwd);
person James Montagne    schedule 29.04.2011
comment
Отлично, это сработало с одним небольшим изменением: $('a.Next').unbind().bind('click',function(){e.preventDefault();}); изменено на $('a.Next').unbind().bind('click',function(e){e.preventDefault();}); - person Tami; 29.04.2011
comment
Ах да, не проверял, пропустил e. Ответ обновлен для потомков! - person James Montagne; 29.04.2011

Почему бы не удалить атрибут href из ссылки. Там это бесполезно, курсор можно установить через CSS, и если у a-элемента нет href, то ничего не мешает, если не подключен обработчик событий.

person Dr.Molle    schedule 29.04.2011