2015-01-12 2 views
0

HTMLКак предотвратить изменение значения переменной внутри кликов и функции fadeOut?

<div class="dropdown"> 
    <label class="add-genre-filter not-selected">Add genre filter</label> 
    <select class="filter" name="filter[]"> 
     <option value="some-value">Some Item</option> 
     <option value="some-value">Some Item</option> 
     <option value="some-value">Some Item</option> 
     <option value="some-value">Some Item</option> 
    </select> 
    <span class="cancel"> x </span> 
</div> 

JS

$(document).ready(function(){ 
    var genreLimit = 3; 

    $('.dropdown .add-genre-filter').live('click', function(){ 
     genreLimit ? ($(this).parent().append(options) , genreLimit--) : false; 
     console.log(genreLimit); 
    }); 
    $('.dropdown .cancel').live('click', function(){ 
     $(this).prev().fadeOut("normal", function(){ $(this).remove(); }); 
     $(this).fadeOut("normal", function(){ genreLimit++; $(this).remove(); }); 
     console.log(genreLimit); 
    }); 

}); 

NB: Я использую JQuery 1.6, поэтому до сих пор используют live() функцию

При нажатии на <span class="cancel"> как select и span исчезают и удаляются из документа. В то же время это увеличивает стоимость genreLimit по 1

Но если я несколько раз нажмите на х в span затем genreLimit значение увеличивается на количество кликов, пока она не исчезнет полностью аутов. Я знаю, что это должно быть уменьшено, потому что оно находится внутри события click.

Однако, я хочу увеличить значение только один раз в fadeOut. Таким образом, нажатие нескольких раз не изменит мою функциональность. Что можно сделать здесь?

+0

Ваш '.Добавьте-жанрово-filter' щелчок может быть просто:. 'Если (genreLimit && $ (» выпадающий .cancel '). is (': animated ')) $ (this) .parent(). append (options), genreLimit -; ' –

+0

Вы действительно должны изучить более современное jQuery и вариант .one() на .на(); см.: http://api.jquery.com/one/ –

+0

В отличие от сайтов на форуме, мы не используем «Спасибо», или «Любая помощь оценена» или подписи на [so]. См. «[Должны ли« Привет »,« спасибо », теги и приветствия удалены из сообщений?] (Http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be - спасибо за сообщение). BTW, это «Спасибо заранее», а не «Спасибо в продвинутом». –

ответ

1

Вы можете установить флаг, чтобы сказать, что она выполняет угасание ..

$(document).ready(function(){ 
    var genreLimit = 3; 
    var is_fading = false; 

    $('.dropdown .add-genre-filter').live('click', function(){ 
     genreLimit ? ($(this).parent().append(options) , genreLimit--) : false; 
     console.log(genreLimit); 
    }); 
    $('.dropdown .cancel').live('click', function(){ 
     if (is_fading) return; // don't run if it is already fading... 

     is_fading = true; 
     // choose the correct callback to 'unlock' the flag.. 
     $(this).prev().fadeOut("normal", function(){ $(this).remove(); is_fading = false;? }); 
     $(this).fadeOut("normal", function(){ genreLimit++; $(this).remove(); is_fading = false;? }); 
     console.log(genreLimit); 
    }); 
}); 
+0

Спасибо за решение. В чем смысл '?' в конце btw? –

+0

жаль, что ... ничего , это больше похоже на «может быть здесь или здесь». –

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