Функция щелчка JQuery не вызывает другую функцию

0

Здравствуй.
У меня есть функция продолжения и остановки.
Когда я вызываю функцию остановки, щелкнув в одном из синих квадратов, она вызывает функцию продолжения через 1 мс позже.

Моя проблема в том, что когда я нажимаю "Документ", он должен снова вызвать функцию остановки, но это не так, вот скрипка для более пристального взгляда.

JsFiddle

PS: в коде javascript вам нужно прокрутить весь путь вниз, потому что я не мог включить плагин JQuery.

Я отметил свою проблему с этим комментарием, где начинается мое кодирование:

//############ here starts my part ####################
  • 1
    Он снова вызывает функцию stop , и это является частью вашей проблемы. Он будет связывать одни и те же события снова и снова, и для каждой привязки будут вызываться все обработчики событий. Когда вы нажали 10 раз, у вас будет 1024 обработчика события щелчка, привязанных к каждому элементу, и следующий щелчок вызовет создание еще 1024 привязок. Нажмите еще несколько раз, и вы заметите, что браузер останавливается на несколько секунд каждый раз, запуская тысячи обработчиков событий и связывая тысячи других событий.
  • 0
    Прежде всего, спасибо за вашу помощь. Я новичок в jquery 1 1/2 недели или что-то в этом роде, и мне интересно, как это исправить. Потому что для меня все кажется правильным.
Теги:
call
function
continue

1 ответ

1
Лучший ответ

Как указано в комментариях, не повторяйте свое событие каждый раз, когда вызывается stop(). Давайте переместим эту привязку, и мы также будем использовать stopPropgation() чтобы событие клика не stopPropgation() в документе, что запустит плагин, чтобы снова запустить mojo:

function stop(){     
    $("#webticker").trigger('click'); //This method doesn't provide anything, except perhaps making code a bit more readable
}

$("#webticker").click(function(event){
        event.stopPropagation(); //If we don't stop propagation, the click event will bubble up to the document, which will start the ticker again
        $("#webticker").webTicker('stop');

          if($(event.target).is('#img1')) {
            $('#log').html(event.target.id + ' was clicked.');
            timer = setTimeout(contin, 1);
        } else if($(event.target).is('#img2')){
            $('#log').html(event.target.id + ' was clicked.');
            timer = setTimeout(contin, 1);
        } else if($(event.target).is('#img3')){
            $('#log').html(event.target.id + ' was clicked.');
            timer = setTimeout(contin, 1);
        } else if($(event.target).is('#img4')){
            $('#log').html(event.target.id + ' was clicked.');
            timer = setTimeout(contin, 1);
        } else if($(event.target).is('#img5')){
            $('#log').html(event.target.id + ' was clicked.');
            timer = setTimeout(contin, 1);
        }
  });

JSFiddle: http://jsfiddle.net/rLyyR/6/

  • 0
    Большое спасибо Вам.
  • 0
    Я нашел ошибку в вашем коде, но не знаю, как ее исправить. если я щелкаю один раз, функция континента запускается один раз: если я щелкаю по нему второй раз, он дважды активирует функцию континуума и так далее. ты знаешь как это исправить? или кто-то еще?
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню