js事件不同写法的处理方式是什么?
学习js事件时,有三种不同的写法,第一种
<button id="btn" onclick="aa(dianji(),1000)">点击</button>
<script>
function dianji() {
console.log("点击")
}
// 防抖
function aa(fn, delay) {
let timer = null
// console.log(timer)
return function () {
if (timer) {
clearTimeout(timer)
}
timer = setTimeout(fn, delay)
}
}
</script>
第二种
<button id="btn" >点击</button>
<script>
function dianji() {
console.log("点击")
}
// 防抖
function aa(fn, delay) {
let timer = null
// console.log(timer)
return function () {
if (timer) {
clearTimeout(timer)
}
timer = setTimeout(fn, delay)
}
}
let a = document.getElementById("btn")
a.onclick = aa(dianji, 1000);
// console.log(timer)
</script>
第三种
<button id="btn" >点击</button>
<script>
// 节流
function aa1(fn,delay){
let valid = true;
return function(){
if(!valid){
return false;
}
valid = false;
setTimeout(function(){
fn();
valid = true;
},delay)
}
}
function dianji() {
console.log("点击")
}
// 防抖
function aa(fn, delay) {
let timer = null
// console.log(timer)
return function () {
if (timer) {
clearTimeout(timer)
}
timer = setTimeout(fn, delay)
}
}
let a = document.getElementById("btn")
// a.onclick = aa(dianji, 1000);
a.addEventListener("click",aa(dianji,1000))
// console.log(timer)
</script>
我想实现一下点击事件的防抖效果,但是直接在button标签中加点击事件没有效果。第一个问题:第一种写法哪里有问题?应该怎么改正?第二个问题:这三种写法是不是在运行的时候有区别?区别是什么?希望有人解答一下
回复
1个回答
test
2024-06-26
onclick="aa(dianji(),1000)"
,你的aa函数第一个参数需要的是一个函数,而你的写法带()
指运行dianji这个函数,把函数返回值传给aa,把dianji传给aa应该写成onclick="aa(dianji,1000)"
没啥区别,都是事件绑定,硬说区别,就是addEventListener较前两种可以绑定多次
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容