[英]How do I use an array instead of the variables in this repetitive function?
因此,我的js文件中包含以下代码:
window.onload = function Equal() {
var a = 'b1'
var b = 'box1'
var bookstorname = localStorage.getItem(a)
if (bookstorname == 1) {
document.getElementById(b).setAttribute('checked','checked');
}
if (bookstorname == 0) {
document.getElementById(b).removeAttribute('checked','checked');
}
var a = 'b2'
var b = 'box2'
var bookstorname = localStorage.getItem(a)
if (bookstorname == 1) {
document.getElementById(b).setAttribute('checked','checked');
}
if (bookstorname == 0) {
document.getElementById(b).removeAttribute('checked','checked');
}
}
该函数本身并不重要(它等于在localstorage中设置的checkboxvalues),但是我执行了2次。 第一次将var
a
& b
设置为'b1'
和'box1'
。 然后,我再次运行脚本(相同的脚本),但是将var
a
& b
设置为'b2'
和'box2'
。 现在,这段代码可以用了,但是我的问题是,是否有较短的编写方式? 我可以想象带有循环的某种数组,但是由于某种原因我无法使其工作。 这两个变量是成对的,我知道这可能是一个愚蠢的问题,但我在任何地方都找不到答案。
您可以使用第二个函数,该函数将接受本地存储密钥和复选框ID,例如
window.onload = function Equal() {
setCheckboxState('box1', 'b1');
setCheckboxState('box2', 'b2');
}
function setCheckboxState(id, key) {
document.getElementById(id).checked = 1 == localStorage.getItem(key);
}
function doTheStuff(a, b) {
var bookstorname = localStorage.getItem(a)
if (bookstorname == 1) {
document.getElementById(b).setAttribute('checked','checked');
}
if (bookstorname == 0) {
document.getElementById(b).removeAttribute('checked','checked');
}
}
window.onload = function Equal() {
doTheStuff('b1', 'box1');
doTheStuff('b2', 'box2');
}
?
您可以将通用逻辑分为另一个功能
window.onload = function Equal() { function extractFromStorage(a, b) { var bookstorname = localStorage.getItem(a) if (bookstorname == 1) { document.getElementById(b).setAttribute('checked','checked'); } if (bookstorname == 0) { document.getElementById(b).removeAttribute('checked','checked'); } } extractFromStorage('b1', 'box1'); extractFromStorage('b2', 'box2'); }
这就是我要做的。
您的代码有几个问题。
localStorage
项。 setAttribute
和removeAttribute
,实际上,在这种情况下removeAttribute
没有意义,因为您无法从元素中删除选中的属性。 顺便说一句,为什么在这里使用setAttribute
而不对window.onload
? checked
属性为true或false,它不使用字符串“ checked” 我的解决方案。
// add an event listener rather than replace the event listener
window.addEventListener(
"load", // for the load event
function(){
// the update function that is called for each item;
var update = function(item){
// the right hand side equates to true if the localstorage
// is equal to "1". LocalStorage allways returns a string or
// undefined if the key is not defined.
item.element.checked = localStorage[item.storageName] === "1";
}
// safe element getter
var getElement = function(eId){
var e = document.getElementById(eId); // try and get the element
if(e === null){ // does it exist?
throw "Missing element:"+eId; // no then we can not continue
// the program stops here unless
// you catch the error and deal with
// it gracefully.
}
return e; //ok return the element.
}
// Item creator. This creates a new item.
// sName is the local storage name
// eId id the element ID
var item = function(sName, eId){
return {
storageName: sName, // set the loaclStorage name
element:getElement(eId); // get the element and check its safe
};
}
// make it all safe
try{
// create an array of items.
var items = [
item("b1","box1"),
item("b2","box2")
];
// for each item update the element status
items.forEach(update);
}catch(e){
alert("Could not update page?");
}
}
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.