Я считаю, что это как-то связано с revertFlip()
звонками onBefore
и onEnd
. Это вызывает некоторые странности с addClass
и removeClass
. Посмотрите мой модифицированный пример: http://jsfiddle.net/andrewwhitaker/7cysr/.
Вы увидите, откроете ли вы FireBug, что onBefore
и onEnd
вызываются несколько раз, а я думаю, что имеет следующий эффект (я точно не понял, что происходит ):
- Вызов
onEnd
для обычного "переворота" устанавливает обратимый класс для нужного элемента.
- При вызове
onEnd
для действия "revert flip" устанавливается тот же элемент, что и выше снова при вызове onEnd.
Вот обходной путь. Я использовал onBegin
и упростил onEnd
, поскольку не совсем уверен, что происходит с вызовом revertFlip()
:
$(function() {
var handlerEnabled = true;
$('.flippable:not(.reverted)').live('click', function() {
if (handlerEnabled) {
var $this = $(this);
var $prevFlip = $('.reverted');
var $allBoxes = $('.flippable');
handlerEnabled = false;
$prevFlip.revertFlip();
$prevFlip.removeClass("reverted");
$this.addClass("reverted");
$this.flip({
direction: 'lr',
color: '#82BD2E',
content: 'now flipped',
onEnd: function() {
handlerEnabled = true;
}
});
}
return false;
});
})
Я использую логический флаг для включения и отключения прослушивателя событий. Попробуйте этот пример: http://jsfiddle.net/andrewwhitaker/bX9pb/. Он должен работать так, как вы описали в своем OP (переворачивать только один раз за раз).
Ваш оригинальный код ($allBoxes.preventDefault()
) недействителен, потому что $allBoxes
- это набор элементов. preventDefault
- это функция для объекта события jQuery .