如何预先使用Javascript本地存储项目功能调用
我有一个对象的构造函数,其中包含变量和函数/方法(?)。我有多个对象,其中的每一个使用以下(对于每个ID和项目号变化)称为:如何预先使用Javascript本地存储项目功能调用
document.getElementById("item1").addEventListener("click", item1.apply);
对象名和ID是相同的,这个值也被添加到本地存储器中的功能时运行。理论上,我想抓取该值,并在页面重新加载时使用它来生成/运行相同的功能(称为onclick)。
这听起来很简单,我认为连接可能会这样做。我可以[value] + [.apply();]来获得“item1.apply();”在控制台中,但我无法让浏览器识别/运行它作为一个功能。
在将其标记为重复创建动态函数等问题之前 - 我发现的大多数线程似乎比我需要的复杂得多。我试图和他们一起工作,但我没有办法。我没有包含更多的代码,因为我不想让复杂化似乎是一个相对简单的问题; onload获取值,添加到函数调用,运行。也许有一个简单的解决方案,我没有看到(新手是一个'全部)?
如果不是这样,我希望有人能指出我在正确的方向,因为我是正确的卡...提前
谢谢!
工作代码:
var itemsArray = ["item1", "item2", "item3"];
var currentItem = localStorage.getItem("current", this.value);
if(localStorage.getItem("current") !== null) { // check if local storage item exists
function isMatch(value, index, array) { // run current item thru isMatch
return value == currentItem; // check if returned value matches currentItem
}
var result = itemsArray.filter(isMatch); // this will be the matching item in itemsArray
window[result]["applyIt"](); // use the result to concatenate function call
console.log("show me: " + result[0]); // create a string with it
};
基于你的问题,你可以尝试这样做:
window[value][apply]();
在你的情况:
window["item1"]["apply"]()
凡item1
是在一个函数全球范围和apply
只是apply
。
假设变量是全局的。如果他们不是? –
你是正确的,否则,然后你需要对象的名称。最终你会回到窗口。 – Mouser
非常感谢您的意见,在您与易卜拉欣之间,我能够得到它的工作!使用你的建议,我可以连接函数调用,就像我正在尝试做的那样(上面添加)。真棒!我不确定为什么窗口[“item”] ...有效,但项目[“item1”] ...并不像变量是全局的那样,按照您的假设。或者至少我认为他们是 - 他们不是在一个函数或任何东西。也许你或@ibrahim可以解释/链接一个线程? 再次感谢您的帮助! – Meanderling
在一个对象中对'itemN'进行分组,并使用一个键访问你需要的那个:'var items = {“item1”:item1,“item2”:item2,...};'然后使用'items'比如:'items [“item1”]。apply'。 –
我已经把一个选项作为答案。提供一些基本代码[mcve],以便我们可以帮助您更多。 – Mouser
非常感谢您回复我! 够搞笑的是,我已经有一个物品数组,我用来检查检索的物品是否有效(不知道它是否是绝对必要的,但它似乎是一个好主意)。我没有想过用它来填充函数调用,所以这是一个有用的提示。不幸的是我无法让它工作(如果你喜欢,可以共享非工作位)?所以搬到了Mouser的解决方案,它的工作。我将编辑我的原始问题以显示结果,如果您有任何进一步的意见,请随时分享。 再次感谢! – Meanderling