2013-07-08 2 views
0

В настоящее время я работаю над приложением карточной игры, используя комбинацию PHP и JavaScript. Однако я столкнулся с проблемой обработки событий. Функциональность, которую я хочу, заключается в том, чтобы игрок мог щелкнуть по карте, после чего появится сообщение с инструкцией снова щелкнуть карту, чтобы перевернуть ее. Вот моя основная установка:Правильный способ структурирования Обработка событий JQuery

function flipPlayerCard($card) { 
    gameAlert('Click the card again if you would like to flip it.'); 
    $compareCard = $card; 
    $('body').off().on('click', '.card', function() { 
     if ($compareCard.attr('id') == $(this).attr('id')) { 
        console.log('Flipping card'); 
      //Call the flip player card function 
     } 
     else { 
      gameAlert(''); 
      resetBinds(); 
     } 
    }); 
} 
function resetBinds() { 
    $('body').off().find('.player').eq(turn).find('.card').add('.draw_pile .card').add('.discard_pile .card').on('click', function(event) { 
     event.stopPropagation(); 
     cardSwitch($(this)); 
    }); 
} 
function cardSwitch($this) { 
    $('body').off(); 
    var type = $this.parent().parent().attr('class'); 
    switch (type) { 
     case 'player': 
      flipPlayerCard($this); 
      break; 
     case 'discard_pile': 
      takeDiscardPileCard(); 
      break; 
     case 'draw_pile': 
      flipDrawPileCard(); 
      break; 
    } 
} 
$(document).ready(function() { 
    resetBinds(); 
}); 

На первом нажмите он работает отлично, но на второй клик ничего не записывается в консоль. Я знаю, что должен быть лучший способ справиться с этими связанными событиями, подобными этому. Что мне не хватает? Любая помощь приветствуется.

+0

'функция cardSwitch ($ это) {' это новый ... приняв это в качестве параметра. – gdoron

+0

OP должен сгенерировать флип. Не мог сопротивляться. – harpo

+0

Я уверен, что '.off()' function ** требует ** аргумента, чтобы сообщить, какие обработчики удалить. – Pointy

ответ

1

что-то проще, может быть

function flipPlayerCard(card) { 

    if (card.hasClass('clicked')) { 
     // code to flip the card 
     card.removeClass('clicked'); 
    } else { 
     $('.clicked').removeClass('clicked'); // if clicked on new one, clear old 
     card.addClass('clicked'); 
     gameAlert('Click the card again if you would like to flip it.'); 
    } 
} 

таким образом, что вам не нужно, чтобы сбросить настройки привязок событий

+0

Отличная идея. Работает отлично. Я переусердствовал над проблемой. Благодаря! – MrGrinst

+0

Я не уверен точно, как вы хотите, чтобы игра работала, но я думаю, вам, возможно, придется удалить класс «clicked» из всех элементов, прежде чем добавлять его на нужную вам карту, чтобы игрок не получал куча карт с одним щелчком ... редактирование –

+0

Да, это то, что я закончил делать. Еще раз спасибо! – MrGrinst

Смежные вопросы