Игнорировать onHashChange при ручном редактировании window.location - PullRequest
1 голос
/ 25 февраля 2011

Есть ли способ НЕ запускать onHashChange , когда я вручную редактирую хеш с помощью javascript?

window.location = 'http://www.site.com/foo.html#newHash';

Я хотел бы запускать onHashChange, только когда пользователь нажимает назад или вперед в браузере или введите новый хеш самостоятельно.

Ответы [ 2 ]

3 голосов
/ 26 февраля 2011

Не самый чистый подход, но вы можете установить флаг перед изменением хэша через JS. Я обернул это в функцию - windowLocation().

function windowLocation(url) {
    window.jsHashFlag = true;
    window.newURL = url;
    window.location = url;
}

function hashChange(e) {
    if(window.jsHashFlag && e.newURL == window.newURL) {
        // hash changed programmatically
        window.jsHashFlag = false;
        window.newURL = '';
    }
    else {
        // hash changed manually
        // do something
    }
}
window.jsHashFlag = false;
window.onhashchange = hashChange;

// ...

windowLocation('http://www.site.com/foo.html#newHash');
0 голосов
/ 25 февраля 2011

Вы можете подключиться к событию onHashChange с помощью jquery bbq (http://benalman.com/projects/jquery-bbq-plugin/)) и условно запускать любые действия, которые вам нужны. Хотя я не уверен, как обнаруживать щелчки назад / вперед.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...