2014-01-27 2 views
0

Я создал начальное событие click, которое создает часть изображения. Как только это запустилось, я пытаюсь создать еще одно событие click, которое будет продолжать создавать часть изображения. Как только начальное событие клика запускается, второй, который я создал, не работает. Нужен ли мне дополнительный оператор if? Вот то, что я до сих пор и есть три кадра в каждом случае на клик:Попытка создания последовательных событий on.click

$(function() { 
    var frames = $('#animation').children(); 
    var frameCount = frames.length; 

    function startAnimation() { 
     var i = 0; 
     var animationInterval = setInterval(function() { 
     if(i > frameCount - 1) { 
      clearInterval(animationInterval); 
     } else { 
      frames[i % frameCount].style.display = "none"; 
      frames[i++].style.display = "inline"; 
     } 
     },1000); 
    } 

    $(frames[0]).on('click', startAnimation); 


    var frames1 = $('#animation1').children(); 
    var frameCount1 = frames1.length; 


    function continueAnimation() { 
     var i = 0; 
     var animationInterval1 = setInterval(function() { 
     if(i < frameCount - 1) { 
      clearInterval(animationInterval1); 
     } else { 
      frames1[i % frameCount1].style.display = "block"; 
      frames1[i++].style.display = "inline"; 
     } 
     },1000); 
    } 

    $(frames[3]).on('click', continueAnimation); 
}); 
+0

а [jsfiddle.net] (http://jsfiddle.net) пример было бы здорово – Ergec

+0

Эй Ergec, нет проблем , вот ссылка: http://jsfiddle.net/jeminip/gEF7G/1/. По какой-то причине я не могу заставить изображения появляться. Кроме того, извините за повторное опубликование этого комментария, как 10 миллиардов раз – Jem

+0

Я понятия не имею, что вы после, но давайте попробуем. Проверьте это: http://jsfiddle.net/ergec/56qfK/6/ – Ergec

ответ

0

Вы должны использовать функции делегата Jquery (в http://api.jquery.com/delegate/). На данный момент немного сложно предоставить вам какой-либо код - как заметил Эрджек, пример JS Fiddle был бы замечательным. Ваша проблема в основном связана с тем, как работает функция .on(), она регистрирует этот триггер только при загрузке DOM, а не для последующих изменений в DOM, это где .delegate ('event', 'target', function (event) { }); пригодится, так как позволяет программным образом присоединять события даже для последующих изменений DOM.

+0

Фактически '.on()' работает для последующих изменений в DOM. '$ (" body "). on (" click "," .selector ", function() {do stuff here})' эквивалентно '$ (". selector "). live (" click ", function() {do stuff here}); ' – Ergec

+0

Спасибо за то, что Ergec, после проверки веб-сайта JQuery, выглядит как предпочтительный метод для v 1.4 - 1.7, но предпочтительным является метод 1.7+ on(). Спасибо, что предупредил меня об этом - всегда хорошо учиться чему-то новому! –

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