我正在尝试制作Chuck Norris笑话发生器。我有一个生成新的笑话按钮,可以从api获取一个新的笑话,并且我有几个具有不同笑话类别的按钮。
我有一个全局变量categories
,每当单击类别按钮时,我都会尝试对其进行突变,但是当获取新的笑话时,该变量将继续具有默认值。
我究竟做错了什么 ?
这是代码:
document.addEventListener('DOMContentLoaded', start);
let category = 'animal';
async function fetchJoke(arrayz) {
const response = await Promise.all(arrayz.map(url => fetch(url).then(response => response.json())));
return response;
}
function start() {
console.log('ready');
fetchJoke(arrayz).then(render);
}
const arrayz = [`https://api.chucknorris.io/jokes/random?category=${category}`, 'https://api.chucknorris.io/jokes/categories'];
function render(data) {
const main = document.querySelector('main');
main.innerHTML = '';
const clone = document.querySelector('.template').content.cloneNode(true);
const joke = clone.querySelector('p');
joke.textContent = data[0].value;
clone.querySelector('.zbutton').addEventListener('click', () => {
start();
});
createButton(data, clone);
main.appendChild(clone);
}
function createButton(data, clone) {
data[1].map(category => {
const button = document.createElement('button');
button.appendChild(document.createTextNode(category));
button.addEventListener('click', (e) => {
category = e.target.innerText;
start();
});
clone.querySelector('.buttons').appendChild(button);
})
}
链接到jsfiddle
您有两个名为的变量category
。
let
在脚本顶部创建的一个,您只能从中读取。map
。您覆盖了后者,但随后再也没有阅读它。
如果您想在此时覆盖全局变量,请不要在较窄的范围内用同名的另一个变量屏蔽它。
当然,这会带来另一个问题,即在生成要分配给中的第一项的字符串时,您只能读取一次全局category
变量。arrayz
您需要对其内部start
进行更新,以使其发挥任何作用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句