Примечание: я использую только ваниль JS.
Мои параметры выбора вызывают classList.add
примерно так
CSS:
body{font-family:arial}
body.uppercase {text-transform:uppercase}
body.comicsans {font-family:comic sans ms}
HTML:
<select class="option" id="test" name="test" onchange="selectFonts(this)">
<option value="arial">Arial</option>
<option value="uppercase">Uppercase</option>
<option value="comicsans">Comic sans (dyslexic friendly)</option>
Скрипт (# 1):
function selectFonts(element) {
const a = element.options[element.selectedIndex].value;
if(a == "arial") {
[].map.call(document.querySelectorAll('body'), function(el) {
el.classList.remove("uppercase","comicsans"); el.classList.add('arial');});
}
if(a == "uppercase") {
[].map.call(document.querySelectorAll('body'), function(el) {
el.classList.remove("comicsans","arial");el.classList.add("uppercase"); });
}
if(a == "comicsans") {
[].map.call(document.querySelectorAll('body'), function(el) {
el.classList.remove("uppercase","arial");el.classList.add('comicsans'); });
}
}
Все работает нормально. Теперь я пытаюсь добавить localStorage
, чтобы параметры и добавленный класс оставались на refre sh, добавив следующий скрипт.
Script (# 2)
document.getElementById("test").onchange = function() {
localStorage['test'] = document.getElementById("test").value;}
window.onload= function() {
if(localStorage['test'])
document.getElementById("test").value = localStorage['test']; }.
Script # 2 работает, выбранный параметр остается тем же при refre sh, однако он отключает сценарий # 1 - классы не добавляются.
Для пояснения, оба сценария работают при использовании по отдельности, но не вместе. # 2 отменяет # 1.
Есть ли способ заставить их обоих работать вместе?
Вот рабочий jsfiddle со скриптом # 1 (добавление классов)
и jsbin скрипта # 2 (localalstorage)