使用 JavaScript 记住图像和 div 的切换状态
Remembering toggled state of an image and a div using JavaScript
我是 HTML、CSS 和 JavaScript 的新手,我学到的知识足以制作一个首页。我有一个搜索栏,当单击侧面的图像元素(这里是搜索引擎的徽标)时,它会在两个不同的搜索引擎之间切换,并且还会切换图像元素以匹配新状态。这是 JavaScript 代码:
function toggleEngine()
{
var gSearch = document.getElementById("gSearch");
var dSearch = document.getElementById("dSearch");
gSearch.style.display = (
gSearch.style.display == "none" ? "block" : "none");
dSearch.style.display = (
dSearch.style.display == "none" ? "block" : "none");
var logo = document.getElementById("engineLogo").src;
if (logo.indexOf("google.svg") != -1)
{
document.getElementById("engineLogo").src = "icons/duck.svg";
}
else
{
document.getElementById("engineLogo").src = "icons/google.svg";
}
document.getElementById("textField").reset();
}
HTML代码:
<html>
<body>
<div class="search_box">
<img class="engine" id="engineLogo" src="icons/google.svg" onclick="toggleEngine()" style="cursor:pointer" />
<div id="gSearch" style="display:block;">
<form id="textField" class="google" action="https://google.com/search" method="get">
<input class="input_box" type="text" name="q" placeholder="Search with Google">
<button class="button"> <img src="icons/search.svg" style="cursor:pointer" /></button>
</form>
</div>
<div id="dSearch" style="display:none;">
<form class="duck" action="https://duckduckgo.com/" method="get">
<input class="input_box" type="text" name="q" placeholder="Search with DuckDuckGo">
<button class="button"> <img src="icons/search.svg" style="cursor:pointer" /></button>
</form>
</div>
</div>
</body>
</html>
默认引擎是 Google,备用引擎是 DuckDuckGo。当我刷新页面时,它总是返回到默认搜索引擎 (Google)。
如何让它记住切换状态?例如:如果我切换到 DuckDuckGo,下次打开页面时,当前搜索引擎应该是 Google。这是 live preview.
您可以利用浏览器的 localStorage
功能来保留当前首选的引擎。
例如,您可以在脚本中添加一个 document.onload
函数来检查浏览器 localStorage
中保存的值,并根据保存的徽标更新搜索栏中的徽标。
window.onload = function() {
var gSearch = document.getElementById("gSearch");
var dSearch = document.getElementById("dSearch");
let storedLogo = localstorage.getItem('preferredEngine');
let currentLogo;
// if no value exists in the local storage
if(!storedLogo){
currentLogo = document.getElementById("engineLogo").src;
localStorage.setItem('preferredEngine', currentLogo);
} else {
// set the logo on the basis of received from local storage
if(storedLogo.indexOf("google.svg")){
document.getElementById("engineLogo").src = "icons/google.svg";
gSearch.style.display = "block";
dSearch.style.display = "none";
} else {
document.getElementById("engineLogo").src = "icons/duck.svg";
dSearch.style.display = "block";
gSearch.style.display = "none";
}
}
}
此外,您可以在 toggleLogo
方法中添加以下行,以便在用户切换首选徽标时使用最新值更新 localstorage
值:
var logo = document.getElementById("engineLogo").src;
localStorage.setItem('preferredEngine', logo);
我是 HTML、CSS 和 JavaScript 的新手,我学到的知识足以制作一个首页。我有一个搜索栏,当单击侧面的图像元素(这里是搜索引擎的徽标)时,它会在两个不同的搜索引擎之间切换,并且还会切换图像元素以匹配新状态。这是 JavaScript 代码:
function toggleEngine()
{
var gSearch = document.getElementById("gSearch");
var dSearch = document.getElementById("dSearch");
gSearch.style.display = (
gSearch.style.display == "none" ? "block" : "none");
dSearch.style.display = (
dSearch.style.display == "none" ? "block" : "none");
var logo = document.getElementById("engineLogo").src;
if (logo.indexOf("google.svg") != -1)
{
document.getElementById("engineLogo").src = "icons/duck.svg";
}
else
{
document.getElementById("engineLogo").src = "icons/google.svg";
}
document.getElementById("textField").reset();
}
HTML代码:
<html>
<body>
<div class="search_box">
<img class="engine" id="engineLogo" src="icons/google.svg" onclick="toggleEngine()" style="cursor:pointer" />
<div id="gSearch" style="display:block;">
<form id="textField" class="google" action="https://google.com/search" method="get">
<input class="input_box" type="text" name="q" placeholder="Search with Google">
<button class="button"> <img src="icons/search.svg" style="cursor:pointer" /></button>
</form>
</div>
<div id="dSearch" style="display:none;">
<form class="duck" action="https://duckduckgo.com/" method="get">
<input class="input_box" type="text" name="q" placeholder="Search with DuckDuckGo">
<button class="button"> <img src="icons/search.svg" style="cursor:pointer" /></button>
</form>
</div>
</div>
</body>
</html>
默认引擎是 Google,备用引擎是 DuckDuckGo。当我刷新页面时,它总是返回到默认搜索引擎 (Google)。
如何让它记住切换状态?例如:如果我切换到 DuckDuckGo,下次打开页面时,当前搜索引擎应该是 Google。这是 live preview.
您可以利用浏览器的 localStorage
功能来保留当前首选的引擎。
例如,您可以在脚本中添加一个 document.onload
函数来检查浏览器 localStorage
中保存的值,并根据保存的徽标更新搜索栏中的徽标。
window.onload = function() {
var gSearch = document.getElementById("gSearch");
var dSearch = document.getElementById("dSearch");
let storedLogo = localstorage.getItem('preferredEngine');
let currentLogo;
// if no value exists in the local storage
if(!storedLogo){
currentLogo = document.getElementById("engineLogo").src;
localStorage.setItem('preferredEngine', currentLogo);
} else {
// set the logo on the basis of received from local storage
if(storedLogo.indexOf("google.svg")){
document.getElementById("engineLogo").src = "icons/google.svg";
gSearch.style.display = "block";
dSearch.style.display = "none";
} else {
document.getElementById("engineLogo").src = "icons/duck.svg";
dSearch.style.display = "block";
gSearch.style.display = "none";
}
}
}
此外,您可以在 toggleLogo
方法中添加以下行,以便在用户切换首选徽标时使用最新值更新 localstorage
值:
var logo = document.getElementById("engineLogo").src;
localStorage.setItem('preferredEngine', logo);