localStorage 为空,但仅来自一个函数,而不是另一个函数
2020-03-31
231
我有一个 PHP 页面,它在末尾加载两个 JS 文件。在第一个文件中,我有这个...
// global variables
var refineSearchStorage = {};
// function calls
window.addEventListener("load", function() {
refineSearchStorage.get();
});
refineSearchStorage = {
data : null, // empty storage
get : function() {
refineSearchStorage.data = localStorage.getItem("refineSearchStorage");
if(refineSearchStorage.data === null) {
refineSearchStorage.data = { refineKeywords: '' };
refineSearchStorage.save();
}
else {
refineSearchStorage.data = JSON.parse(refineSearchStorage.data);
}
},
add : function(x) {
refineSearchStorage.data.refineKeywords = x;
refineSearchStorage.save();
},
save : function() {
localStorage.setItem("refineSearchStorage", JSON.stringify(refineSearchStorage.data));
}
};
内联 javascript 从页面中间调用函数 1。它由 PHP 在搜索结果后创建...
<script>
window.addEventListener('load', function () {
searchActions('{$keywords_human}');
});
</script>
函数 1 出现在第二个 JS 页面中,结果是
Uncaught TypeError: Cannot set property 'refineKeywords' of null
... 而不是添加到 localStorage。
function searchActions(x) {
refineSearchStorage.add(x);
}
单击按钮即可调用下面的函数 2,并将其添加到 localStorage 变量中,不会出现问题。它也位于第二个 JS 页面上...
function keywordAdd(y) {
var existingParams = refineSearchStorage.data.refineKeywords;
var param = y.toLowerCase();
var newParams;
newParams = (existingParams + ' ' + param).trim();
refineSearchStorage.add(newParams);
}
函数 1 以前可以工作,但是当我将函数拆分到不同的页面上时,我做了一些事情来破坏它。我做了什么?
2个回答
这是因为
window.addEventListener('load', function () {
searchActions('{$keywords_human}');
});
在
window.addEventListener("load", function() {
refineSearchStorage.get();
});
之前被调用
Alex Gholamian
2020-03-31
该错误意味着您的 data 属性为 null
转换添加到
add : function(x) {
refineSearchStorage.data = refineSearchStorage.data || {}; // this might help
refineSearchStorage.data.refineKeywords = x;
refineSearchStorage.save();
},
Tonoslav
2020-03-31