Можете помочь с настройкой cookie, чтобы они функционировали нормально?

Как исправить ошибку "Uncaught ReferenceError: setcookie is not defined" в данном скрипте, который переключает тему с светлого на черный, но не сохраняет в cookie? При этом скрипт переключает класс тела документа, добавляет и удаляет определенные элементы и должен вызывать функцию setcookie для сохранения темы. Код скрипта и кнопки переключения представлены ниже:

```javascript
function changeTheme() {
 if ($('body').hasClass('light')) {
 $('body').removeClass('light');
 $(".theme-light").remove();
 $('.change-color__light').removeClass('is-active');
 $('.change-color__dark').addClass('is-active');
 $('.change-color').attr("title", "Темное оформление");
 setcookie('theme-class', 'dark');
 } else {
 $('head').append('<link class="theme-light" rel="stylesheet" type="text/css" href="/templates/css/light.css?v=' + (new Date().getTime()) + '">');
 $('.change-color__dark').removeClass('is-active');
 $('.change-color__light').addClass('is-active');
 $('body').addClass('light');
 $('.change-color').attr("title", "Светлое оформление");
 setcookie('theme-class', 'light');
 }
}
```

```html
<div class="change-color" onclick="changeTheme();" title="Темное оформление"><span class="fas fa-moon"></span></div>
```
  • 2 ноября 2023 г. 15:29
Ответы на вопрос 3
Ошибка "Uncaught ReferenceError: setcookie is not defined" возникает потому, что в коде скрипта используется функция setcookie, которая не определена в данном скрипте или в другом месте.

Чтобы исправить эту ошибку и сохранить тему в cookie, вам нужно определить функцию setcookie. Вот пример функции, которую вы можете использовать:

```javascript
function setcookie(name, value, days) {
 var expires = "";
 if (days) {
 var date = new Date();
 date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
 expires = "; expires=" + date.toUTCString();
 }
 document.cookie = name + "=" + (value || "") + expires + "; path=/";
}
```

Добавьте эту функцию перед функцией changeTheme:

```javascript
function setcookie(name, value, days) {
 var expires = "";
 if (days) {
 var date = new Date();
 date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
 expires = "; expires=" + date.toUTCString();
 }
 document.cookie = name + "=" + (value || "") + expires + "; path=/";
}

function changeTheme() {
 ...
}
```

Теперь функция setcookie должна быть определена и ваш код должен работать без ошибок.
function setcookie(name, value, options = {}) {
  options = {
    path: '/',
    // при необходимости добавьте другие значения по умолчанию...
    ...options
  };
  if (options.expires instanceof Date) {
    options.expires = options.expires.toUTCString();
  }
  let updatedCookie = encodeURIComponent(name) + "=" + encodeURIComponent(value);
  for (let optionKey in options) {
    updatedCookie += "; " + optionKey;
    let optionValue = options[optionKey];
    if (optionValue !== true) {
      updatedCookie += "=" + optionValue;
    }
  }
  document.cookie = updatedCookie;
}

добавьте этот код 
 Функция `setcookie` используется для установки куки. Она принимает три аргумента: `name` (имя куки), `value` (значение куки) и `options` (дополнительные настройки). Если не заданы дополнительные настройки, то используются значения по умолчанию. В коде также приведен пример использования объекта `options` для установки времени и пути истечения срока действия куки.
Похожие вопросы