我试图将一些信息作为字符串添加到嵌套在对象中的数组中。我试图使用一个非常简单的形式来完成这个任务,使用e.target.elements.inputName.value作为字符串的数据。
但是,当我发送表单来更新地标属性时,我正在控制台中得到未定义的返回。这个未定义的对象正在替换以前在控制台中看到的内容,即我的一个城市对象(我有一个城市数组,其中有一个地标数组)。
我可以将新的城市对象推送到我的城市数组中,没有问题,地标属性设置为空数组,但是当我试图在使用表单和push方法中添加一个地标时,city.landmarks.push(landmarkValue)我的代码中断了,而且我正在变得没有定义。
这是我的index.js代码
let cities = getSavedCities()
const cityDiv = document.querySelector('#cities')
renderCities()
document.querySelector('#add-city').addEventListener('submit', (e) => {
e.preventDefault()
cityDiv.innerHTML = ''
const id = uuidv4()
cities.push({
id: id,
name: e.target.elements.addCity.value,
country: '',
landmarks: []
})
saveCities()
renderCities()
e.target.elements.addCity.value = ''
})
这是我的edit.js的代码,在这里我试图添加地标
const cityId = location.hash.substring(1)
const cities = getSavedCities()
const city = cities.find((city) => city.id === cityId)
const nameH2 = document.querySelector('#city-name')
const home = document.querySelector('#home')
nameH2.textContent = city.name
document.querySelector('#landmarks').addEventListener('submit', (e) => {
e.preventDefault()
const city = cities.find((city) => city.id === cityId)
const landmark = e.target.elements.landmarks.value
city.landmarks.push(landmark)
saveCities()
e.target.elements.landmarks.value = ''
})
提交表单后,我生成的已保存的城市对象将被替换为未定义的城市对象,并得到以下错误消息。
VM201:1 Uncaught SyntaxError: "undefined" is not valid JSON
at JSON.parse (<anonymous>)
at getSavedCities (functions.js:5:21)
at edit.js:2:16
发布于 2022-10-26 15:23:29
如果在getSavedCities()函数中出现此错误,则必须在解析它之前检查该值是否未定义。不能用未定义的值解析JSON。JSON值可以是对象、数组、数字、字符串、true、false或null。
https://stackoverflow.com/questions/74209978
复制相似问题