окно привязки к событию popstate, вызванному дважды - PullRequest
3 голосов
/ 11 февраля 2012

Просто привязав окно (в jQuery) к popstate, событие всегда запускается дважды.

$( window ).bind( 'popstate', myFunction );

В myFunction () нет ничего, что могло бы вызвать это - я попытался выделить эту функцию просто:

console.log( 'triggered' );

И результат тот же. Он всегда срабатывает дважды (проверено в Safari, Chrome и Firefox).

Я знаю, что есть проблемы с API истории HTML5, но любые советы, кроме 'try History.js', будут с благодарностью приняты!

Ответы [ 2 ]

6 голосов
/ 12 февраля 2012

Хорошо, я нашел способ решить эту проблему:

jQuery( function( $ ){

  var currentPageNo = location.hash || 1;

  var myFunction = function(){

    var pageNo = location.hash;

    if( pageNo != currentPageNo ){

      // trigger AJAX stuff here

      currentPageNo = pageNo;

    }

  };

  $( window ).bind( 'popstate', myFunction );

});

Функция запускается только один раз, но состояние по-прежнему срабатывает дважды!

2 голосов
/ 11 марта 2012

событие popstate запускается дважды при использовании API истории, то есть histry.back () и history.go (-1). но только один раз с помощью кнопки возврата браузера.

Я использую таймаут в качестве обходного пути:

var timeout = null;
$(window).bind('popstate', function(event) {
    clearTimeout(timeout);
    timeout = setTimeout(function() {
        console.log( 'triggered' );
    }, 50);
});
...