Использование window.location.hash в jQuery - PullRequest
5 голосов
/ 24 октября 2011

Я хотел бы создать меню навигации с выцветанием цветов, используя jQuery, в котором «нажатая» кнопка, соответствующая текущей странице, ведет себя не так, как «не нажатая» кнопка (в частности, она не исчезает до другого цвета при наведении курсора). ). Если я посмотрю на пример по адресу www.guitaracademy.nl, то увижу, что они используют собственный javascript со свойством window.location.hash.

Тем не менее, я не могу вставить этот хеш в jQuery. Вот пример сценария:

<html>
<head>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
    var p=window.location.hash;
    $("#clickme").click(function(){
        alert(p)
    });
});
</script>
</head>
<body>
<a href="#test">Click me first</a>
<div id="clickme">Then click me</div>
</body>
</html>

После загрузки этой страницы я нажимаю ссылку «Сначала щелкни мне»; затем в адресной строке я вижу "#test", добавленный к исходному URL. Однако, если я затем щелкаю по элементу «Тогда щелкни меня», я вижу пустое предупреждение. Похоже, хеш не обновляется.

Буду очень признателен за любую помощь в этом.

Ответы [ 4 ]

6 голосов
/ 24 октября 2011

Попробуйте переместить вызов хеша внутрь функции, чтобы он вызывался каждый раз, когда вызывается щелчок. То, как вы это сделали, это было только загрузка при начальной загрузке страницы.

$(function(){
    $("#clickme").click(function(){
        var p=window.location.hash;
        alert(p)
    });
});
2 голосов
/ 24 октября 2011

Попробуйте поместить var p=window.location.hash; в свой прослушиватель кликов:

<script type="text/javascript">
    $(function(){
        $("#clickme").click(function(){
            var p=window.location.hash;
            alert(p)
        });
    });
</script>
0 голосов
/ 24 октября 2011

Хеш обновляется, но в этом случае переменная 'p' не обновляется.

Здесь оператор присваивания

var p=window.location.hash;

выполняется только один раз при загрузке страницы.Таким образом, в момент загрузки значение P будет пустым, и всегда оно будет пустым.

Вместо

alert(p)

попробуйте

alert(window.location.hash)

или переместите назначение внутри обратного вызова click.то есть чуть выше оповещения

0 голосов
/ 24 октября 2011

Ваша функция для #clickme div никогда не пытается обновить хеш. Если вы ожидаете, что ваш код обновит хеш, вам придется манипулировать им следующим образом:

$("#clickme").click(function(){
    window.location.hash='#secondclick';

    //Remaining Code
});
...