javascript - innerHTML 返回 undefined - JavaScript
问题描述
我正在为我的学习在网络上创建一个游戏。我需要创建一个纸牌游戏,其中每张纸牌都有自己的数据(数字和权力名称),数据取自 data.txt 并放入一个随机数组中。data.txt 看起来像这样:
0
Bored cat
-8
Biting
-10
Scratching
当按下 PLAY 按钮时,Play() 函数会打乱卡座。一旦所有卡片都被随机化,我调用一个函数 addCardCat() ,它应该创建一个带有 h1 和 h3 标签的卡片 div。在 h1 标记中,innerHTML 应该是一个数字,而 h3 应该是电源名称,但是,我总是返回 undefined。可能是什么问题?
JS代码
let counter = 0;
var deck = [];
// ----------READING----------//
let fs = require('fs');
let data = fs.readFileSync('data.txt', 'utf8').split('\r\n');
// ----------RANDOM NUMBER GENERATOR----------//
let numberArray = Array.from(Array(54).keys())
// ----------ARRAY SCRAMBLE---------//
function scrambleArray(array){
let currentIndex = array.length, randomIndex;
// While there remain elements to shuffle...
while (currentIndex != 0){
// Pick a remaining element...
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex--;
// And swap it with the current element.
[array[currentIndex], array[randomIndex]] = [
array[randomIndex], array[currentIndex]];
}
return array;
}
// ----------PLAYING DECK----------//
function scrambleDeck(array){
for(var i = 0; i < 54; i++){
var j = numberArray[i];
array.push(data[j*2]);
array.push(data[j*2+1]);
}
return array;
}
// ----------ADD CARD----------//
function addCardCat(number, power) {
counter++;
var newDiv = document.createElement("div");
newDiv.className += " cat__card";
newDiv.id = 'card-' +counter;
// newDiv.onclick = removeCardCat();
// newDiv.onclick = function() { alert('blah'); };
document.getElementById('cat').appendChild(newDiv);
var newH1 = document.createElement("h1");
var newH3 = document.createElement("h3");
document.getElementById('card-' +counter).appendChild(newH1);
document.getElementById('card-' +counter).appendChild(newH3);
newH1.innerHTML = number;
newH3.innerHTML = power;
return number, power;
}
// ----------START GAME----------//
function play() {
document.getElementById("play").style.display = "none";
scrambleArray(numberArray);
scrambleDeck(deck);
}```
解决方案
很难用提供的次要代码来判断,但这很可能return number, power;
是导致您的问题的原因。
return 语句结束函数执行并指定要返回给函数调用者的值。
return 语句只会返回一个值。您不能使用逗号分隔的列表。请参阅下面的第一个片段,以演示如果您使用逗号分隔的列表会发生什么。
let x = function(number, power) {
//Do stuff
return number, power;
}
console.log(x(2, 5));
请注意,您只取回了逗号分隔列表中的最后一个值。
但是,您可以将这 2 个值包装在一个数组或对象中,例如,然后返回该数组或对象。然后,您可以使用适当的解构方法从数组或对象中提取 2 个值。
像这样:
let x = function(number, power) {
//Do stuff
return [number, power];
}
console.log(x(2, 5));
话虽这么说,但您返回的值与传递给函数的参数相同,而没有以任何方式修改它们,这似乎很奇怪。
根据您对返回值的处理方式,不幸的是您没有在问题中显示,您需要执行以下操作之一:
- 使用我描述的方法。
- 根据需要返回一个有效的单个值(包括真或假)。
- 消除return语句。
推荐阅读
- mysql - 单个查询以获取基于条件的事件和每个事件之后出现的单个事件?
- pandas - 使用带有空值(NaN、NaT)的 `bdate_range`
- html - 向顶部方向增加高度
- snort - 我的 IDS snort.conf 有问题吗?无法在其他 IP 中检测到 Scan Nmap 和 DOS hping
- jquery-query-builder - Querybuilder.js 添加 AND 和 OR 语句
- html - 如何从搜索栏中检索亚马逊的关键字/短语建议
- python - 全局变量函数
- java - 如何使用单个比较的多个 json 路径过滤comapre 2 json?
- javascript - 如何在不使用 JQuery、JSON 或任何外部库的情况下在 JavaScript 中将复选框存储和检索到会话存储?
- excel - 在数据之间插入一行后,我必须在插入的行上方创建数据的数据透视表。当它每周都在变化时,我该怎么做?