I grabbed javascript code from the internet that creates a button to toggle dark mode on and off and it works perfectly fine. Here I'll paste only the relevant chunk of what I've written so far:
<script>
// Wait for document to load
document.addEventListener("DOMContentLoaded", function(event) {
//store in a variable whatever the data-theme is in the sessionStorage
var sessionVariable = sessionStorage.getItem("data-theme");
/*
// if it doesnt exist (which is null, i think) then it sets the data-theme value to light
if string(sessionVariable) == "null"{
document.documentElement.setAttribute("data-theme", "light");
// if it does exist, which means data-theme is either dark or light, then it sets it to that
} else{
document.documentElement.setAttribute("data-theme", string(sessionVariable))
}
*/
document.documentElement.setAttribute("data-theme", "light") //THIS IS THE LINE THAT WORKS, I WOULD LIKE TO REMOVE IT FOR THE COMMENTED OUT CODE ABOVE
// Get our button switcher
var themeSwitcher = document.getElementById("theme-switcher");
// When our button gets clicked
themeSwitcher.onclick = function() {
// Get the current selected theme, on the first run it should be `light`
var currentTheme = document.documentElement.getAttribute("data-theme");
// Switch between `dark` and `light`
var switchToTheme = currentTheme === "dark" ? "light" : "dark";
sessionStorage.setItem("data-theme", "currentTheme"); //store in the sessionStorage whatever the data-theme's value is (the currentTheme)
// Set our current theme to the new one
document.documentElement.setAttribute("data-theme", switchToTheme);
}
});
</script>
It's all commented and pretty. You can check it out at pepesito1.github.io/test/general.html. The button works fine.
Now what I'm trying to do is add sessionStorage functionality to it. As you can see at the beginning I commented out a huge chunk of code: I think that should work but it doesnt, and the original unedited line that I grabbed from the internet is the one I said I want to replace.
So, my logic is, when the page is opened for the first time, clearly there is no "data-theme" stored on the sessionStorage. And when the second javascript line tries to getItem("data-theme"), it should return "null", right?. Then I make it so that if data-theme is null (which means its not been defined yet) it sets the theme to light (default mode), but if it is indeed defined then it sets it to whatever it is (either light or dark)
Yet when I erase the line that I want to delete and un-comment out that chunk of code, the button stops working alltogether. I suppose its because theres something wrong with my "if" statements. What is it? Is the sessionVariable not "null" when its not been defined yet?
CodePudding user response:
The following line
if string(sessionVariable) == "null"{
should be changed to
if (sessionVariable === "null"){
CodePudding user response:
The wrong thing with your "if" is that, you are comparing it with string null not actual null i.e.
"null" /* this is string */
try
if(sessionVariable === null)
here null is absence of any value