JavaScript onclick为什么说函数没有定义?



我一直在写这段代码来生成一个倒计时数学问题和答案,但是当我运行它时它不工作(对不起,有问题的变量名也是这是我第一次使用JavaScript,所以我可能没有做一些正确的事情):

function remove(arr, value){
for( var i = 0; i < arr.length; i++){ 
if ( arr[i] === value) { 
arr.splice(i, 1); 
}
}
}
function pop(array, value){
let n = array[value]
remove(array, value)
return n;
}
let num = [25, 50, 75, 100]
let anum = []
function genrt(){
let leng = parseInt(document.getElementById("i1");)
let small = parseInt(document.getElementById("i2");)
for(i=0; i<leng; i++){
anum.push(Math.floor(Math.random()*10)+1)
}
for(i=0; i<small; i++){
anum.push(num[Math.floor(Math.random()*3)])
}
document.getElementById("1").innerHTML = "Your numbers are: " + String(anum);
let nuum = Math.floor(Math.random()*(anum.length-1))
let out = anum[nuum]
remove(anum, nuum)
ans = String(out)
lenggg = Math.floor(Math.random()*anum.length-3)+3
for(i=0; i<lenggg; i++){
let op = Math.floor(Math.random()*3)
let nnuu = Math.floor(Math.random()*(anum.length-1))
let nuuuum = anum[nnuu]
remove(anum, nnuu)
if(op==0){
out+=nuuuum
ans+='+'
}
if(op==1){
out-=nuuuum
ans+='-'
}
if(op==2){
out*=nuuuum
ans+='*'
}
if(op==3){
out/=nuuuum
ans+='/'
}
ans+=String(nuuuum)
ans+='n'
}
document.getElementById("2").innerHTML = "Your target is: " + String(out);
}
function reveal(){
document.getElementById("3").innerHTML = "The solution is (without bodmas): " + ans;
}
<!doctype html>
<html>
<head>
<title>countdown generator</title>
</head>
<body>
<p>How many small numbers</p>
<input type="int" id="i1" value=3>
<p>How many big numbers</p>
<input type="int" id="i2" value=2>

<button onclick="genrt()">Generate</button>
<p id="1">Your numbers are:</p>
<p id="2">Your target is:</p>
<button onclick="reveal()">Solve it</button>
<p id="3">The solution is (without bodmas)</p>
</body>
</html>

但是当我按下生成按钮时,它说函数类型未定义。我一直在寻找答案的年龄,并尝试了相当多的事情,但似乎没有工作,有人知道我做错了什么?

以下几行有语法错误:

let leng = parseInt(document.getElementById("i1");)
let small = parseInt(document.getElementById("i2");)

您放错了;符号。您应该始终阅读控制台输出,错误在控制台日志中清楚可见。

您的脚本有语法错误。应该在控制台中看到的第一个错误是

Uncaught SyntaxError: missing) after argument list

显然,因为它没有编译Javascript,那么当你之后尝试从失败的块中调用函数时,它将不存在,因为JS引擎无法读取代码以加载它。

如果你修复了语法错误,那么未定义的函数错误就会消失。这实际上是几个相当简单的错别字:

let leng = parseInt(document.getElementById("i1");)
let small = parseInt(document.getElementById("i2");)

需要变成

let leng = parseInt(document.getElementById("i1"));
let small = parseInt(document.getElementById("i2"));

;总是结束一行-如果你在;之后有一些东西本身不形成有效的代码行,那么你知道它肯定是错误的。我建议使用IDE或代码编辑器,它可以理解JavaScript语法,并且可以在您尝试运行代码之前向您突出显示这些问题。

(我不保证您不会有其他不相关的错误或错误,我还没有测试到那个程度的代码。)

在这些行中有WQS分号

let leng = parseInt(document.getElementById("i1");)
let small = parseInt(document.getElementById("i2");)

变量未定义

但是我不知道结果是不是你想要的

我做了一些修改

<html>
<head>
<title>countdown generator</title>
</head>
<body>
<script>
function remove(arr, value){
for( var i = 0; i < arr.length; i++){ 
if ( arr[i] === value) { 
arr.splice(i, 1); 
}
}
}
function pop(array, value){
let n = array[value]
remove(array, value)
return n;
}
let num = [25, 50, 75, 100]
let anum = []
let ans = null
function genrt(){
let leng = parseInt(document.getElementById("i1"))
let small = parseInt(document.getElementById("i2"))
for(i=0; i<leng; i++){
anum.push(Math.floor(Math.random()*10)+1)
}
for(i=0; i<small; i++){
anum.push(num[Math.floor(Math.random()*3)])
}
document.getElementById("1").innerHTML = "Your numbers are: " + String(anum);

let nuum = Math.floor(Math.random()*(anum.length-1))
let out = anum[nuum]
remove(anum, nuum)
console.log(String(out))
ans = String(out)

lenggg = Math.floor(Math.random()*anum.length-3)+3
for(i=0; i<lenggg; i++){
let op = Math.floor(Math.random()*3)
let nnuu = Math.floor(Math.random()*(anum.length-1))
let nuuuum = anum[nnuu]
remove(anum, nnuu)
if(op==0){
out+=nuuuum
ans+='+'
}
if(op==1){
out-=nuuuum
ans+='-'
}
if(op==2){
out*=nuuuum
ans+='*'
}
if(op==3){
out/=nuuuum
ans+='/'
}
ans+=String(nuuuum)
ans+='n'
}
document.getElementById("2").innerHTML = "Your target is: " + String(out);
}
function reveal(){
document.getElementById("3").innerHTML = "The solution is (without bodmas): " + ans;
}
</script>
<p>How many small numbers</p>
<input type="int" id="i1" value=3>
<p>How many big numbers</p>
<input type="int" id="i2" value=2>

<button onclick="genrt()">Generate</button>
<p id="1">Your numbers are:</p>
<p id="2">Your target is:</p>
<button onclick="reveal()">Solve it</button>
<p id="3">The solution is (without bodmas)</p>
</body>
</html>

最新更新