Location.hash......?

В общем есть ссылка вида:

http://site.ru#more:next



Есть штука, которая ловит изменение хеша в браузре на jquery:

$(window).bind('hashchange', function() {<br>
     alert(location.hash);<br>
});




Есть еще одна штука, которая меняет хеш, допустим это ссылка:

<a href='#more:next'>ссылка</a>



И всё вместе: pastebin.com/0VhPHjXM



Что мне нужно?

Допустим мы открыли документ и перешли по ссылке, возникает alert. Проходим второй раз по ссылке: ничего (то есть не возникает события).



У меня было несколько вариантов, как заставить реагировать на изменение хеша, равному хешу в строке запроса:

<a href='#more:next'>Ссылка</a> <!-- не работает --><br>
<a href='#more:next/'>Ссылка</a> <!-- не подходит --><br>
<a href='#more:next '>Ссылка</a> <!-- не работает в опере --><br>
  • Вопрос задан
  • 29362 просмотра
Пригласить эксперта
Ответы на вопрос 7
Borro
@Borro
А так не подойдет?

$('a').click(function(){
     $(window).trigger('hashchange');
});
Ответ написан
Riateche
@Riateche
Если возникает событие смены hash на "#more:next", сразу изменяйте hash на строку, представляющую адрес страницы (например, "#page/42"). Таким образом, при следующем нажатии на ссылку "#more:next" событие изменения hash опять сработает.
Ответ написан
taliban
@taliban
php программист

setTimeout(hashCheck, 100);
var oldHash = null;
function hashCheck()
{
    if( oldHash !== location.hash )
    {
        // хеш изменился
    }
    setTimeout(hashCheck, 100);
}
Ответ написан
disc
@disc
веб-разработчик
Если кликнуть второй раз по ссылке с текущим хешем не сработает эвент, ведь хеш не меняется.
Может стоит обрабатывать onclick событие и в нем вызывать hashchange()?
Ответ написан
Wott
@Wott
А кто мешает менять «активный» hash на что-нить другое по загрузке и/или срабатыванию события hashchange?

идеологически браузеры правы — hash служит для позиционирования внутри страницы и если мы уже на месте, то смысла дергаться нет. но если hash используется хитрожопно, то и, соответственно, надо также хитро это обеспечивать.
Ответ написан
gaelpa
@gaelpa
Забиндить событие на ссылки, меняющие хэш?
Ответ написан
@dhalturin
var _hash = {
    param: {},
    current: '',
    set: function(data)
    {
        if(_hash.current == data)
        {
            log('lock change hash');
            
            return;
        }

        window.location.href = '#' + data;
    },
    get: function()
    {
        var _href = window.location.href.split('#'); _hash.param = {};

        if(_href[1])
        {
            var _tmp = _href[1].split('&');

            for(i in _tmp)
            {
                _hash.param[_tmp[i].split('=')[0]] = _tmp[i].split('=')[1];
            }
        }

        _hash.current = _href[1];

        log('param changed: ', _hash.param);
    }
};

$(document).rady(function(){
    $('a:not(.nolink)').on('click', function (event)
    {
        event.preventDefault();

        _hash.set(this.href.replace(/^.*#/, ''));
    });

    $(window).bind('hashchange', function()
    {
        _hash.get();
    });

    _hash.get();
});


В _hash.get разбираешь строку как душе угодно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Artezio Нижний Новгород
от 130 000 до 180 000 ₽
Intspirit Краснодар
от 80 000 до 150 000 ₽
Artezio Москва
от 160 000 до 220 000 ₽