描述你的问题
如下我是我写的代码;我想要实现的效果是,点击按钮时,每1秒钟给p下面的UL里添加一个LI元素节点;当达到10个LI时停止添加,但是我写出来的代码总是提示 “Uncaught ReferenceError: sih is not defined”。。。但我看网上那些写的定时器是可以直接调取函数名的呀。求大神帮我看一下我哪里写错了,并帮我改正最好;谢谢哈;
贴上相关代码
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script>
//获取ID styl的子节点UI,并通过document.createElement与appendChild的配合,在UL里增加10个LI元素。
window.onload = function(){
var op_1 = document.getElementById('styl');
var oul_1 = op_1.getElementsByTagName('ul')[0];
var oinput_1 =document.getElementById('inp');
function sih(){
for(var i=0;i<10;i++){
var e = document.createElement("li");
e.innerHTML = "这是一个文字" + i % 2;
oul_1.appendChild(e);
if(i%2 == 1){
e.style.backgroundColor = "#990099";
}
else{
e.style.backgroundColor = "#012911";
e.style.color = "#ffffff";
}
};
};
oinput_1.onclick = function(){
setInterval("sih()",1000);
}
}
</script>
</head>
<body>
<input type="button" value="添加LI" id="inp" />
<p id="styl">
<ul>
</ul>
</p>
</body>
</html>
贴上报错信息
贴上相关截图
已经尝试过哪些方法仍然没解决(附上相关链接)
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
把你的
sih()函数定义放到window.onload里面,然后,在setInterval函数里,调用的时候,这样写setInterval(sih, 1000)setInterval函数的第一个参数可以为一个函数对象或一个用字符串表示的js代码段;但是使用字符串时,字符串表示的代码作用域处于最外层,也就是全局作用域下,那么sih变量就要在全局作用域下寻找,而在全局作用域下没有sih这个变量定义
修改方法,传入函数对象而非字符串
oinput_1.onclick 也放到 inload里去
把你setInterval传入的函数名后面的括号去掉
你的点击函数也要放在window.onload里面的
你的 sih() 是放在 onload 的 function 里边的,但是在 setInterval 引用时却是在它(作用域)外边的,所以要把 onclick 处理整体挪到 onload 的 function 里边去才行。
下面的可以:
因为当调用setInterval时传递字符串函数,它会从全局作用域window里查找相关函数,但你的函数定义在onload方法,访问不到,因此不管用。
window.onload = function(){
你的代码有两个地方要注意:
1,就是报错,找不到sin,这个按照@kikong说的思路解决即可
2,在解决报错后,你的代码和你要实现的需求不一致,点击按钮后会1s钟生成十行li,应修改sin函数不用for 循环处理,可以参考以下代码