Jquery не работает переключение файлов cookie

#javascript #jquery #cookies #toggle

#javascript #jquery #файлы cookie #переключение

Вопрос:

Итак, я создал свой скрипт jquery для переключения файлов cookie, но он не работает. Например, когда я нажимаю на триггер, ничего не происходит.

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

 jQuery(document).ready(function ($) {
if ($.cookie('t4hidden')) {
    $('#top4hide').hide();
}
$("#top4trigger").click(function () {
    $("i",this).toggleClass("fa fa-chevron-up fa fa-chevron-down")
    $("#top4hide").toggle("blind");
});
$("#top4trigger").click(function() {
    if ($("#top4hide").is(":hidden")) {
    $.cookie("t4hidden", "foo");
} else {
    $.removeCookie("t4hidden");
}
});
  

jsfiddle:http://jsfiddle.net/P2dy8 /

Комментарии:

1. Не могли бы вы создать JSFiddle , чтобы проиллюстрировать проблему, пожалуйста? Это поможет людям отладить его.

2. Вот так 🙂 jsfiddle.net/P2dy8

Ответ №1:

Основная проблема здесь — это время. В вашем коде есть два обратных вызова по щелчку мыши: один для переключения отображения элемента, а другой для установки файла cookie. Вы не можете контролировать, какой из них запускается первым, но даже если бы вы могли, это не помогло бы. Первый обратный вызов скрывает элемент с анимацией, поэтому, когда запускается второй обратный вызов, элемент все еще виден. Ваша проверка на $('#top4hide").is(":hidden") всегда возвращает false, потому что независимо от того, когда она выполняется — первой или второй — она все еще видна во время.

К счастью, вы можете передать второй параметр в jQuery toggle() — функцию, которая запускается по завершении анимации. Проверяя видимость элемента после анимации, мы можем правильно установить значение cookie. Я опубликовал некоторый рабочий код в JSFiddle, а также ниже; он также переключает ваш шеврон при скрытии div в pageload, если установлен файл cookie. (Для получения и вам потребуется $.cookie() загрузить плагин jQuery cookie $.removeCookie() .)

 $(function() { // $() is an alternative syntax for $(document).ready()
    if ($.cookie('t4hidden')) { // Update page if cookie is set
        $('#top4hide').hide();
        $('#top4trigger i').toggleClass('fa-chevron-up fa-chevron-down');
    }

    $("#top4trigger").click(function() { // Click handler for link
        $("i", this).toggleClass("fa-chevron-up fa-chevron-down")
        $("#top4hide").toggle("blind", function () { // Set/delete cookie after animation complete
            if ($("#top4hide").is(":hidden")) {
                $.cookie("t4hidden", "foo");
            } else {
                $.removeCookie("t4hidden");
            }
        });
    });
});
  

Комментарии:

1. Это не работает. Я получаю эту ошибку:/ Uncaught TypeError: undefined не является функцией

2. Вы загрузили плагин jQuery cookie ? Это необходимо включить на вашу страницу, чтобы получить функцию $.cookie and $.removeCookie .

3. Нет, он не был загружен, вот почему хаха!