项目需求 让js绑定的事件 只触发1次~
可以封装一下多处使用
function one(fn) {
var flag = true;
return function () {
if (flag) {
flag = false;
fn.apply(this, arguments)
}
}
}
document.getElementById("btn").onclick = one(function(e) {
console.log(e)
console.log(this);
})
<input type="button" value="按钮" />
<script>
document.querySelector('input[type="button"]').onclick = function() {
alert(this.value);
this.onclick = null;
};
</script>
<button id="btn">按钮</button>
<script>
function test () {
if(this.clickTimes<1) {
alert('点击第:【 ' + this.clickTimes + ' 】次');
this.clickTimes++;
}else {
alert('已经点过一次了,不做任何操作');
}
}
var oBtn = document.getElementById('btn');
// 记录此按钮点击次数
oBtn.clickTimes = 0;
// 为此按钮绑定事件
oBtn.onclick = test;
</script>
如果只是简单的点击一次后面就不执行click事件的话,可以设置个flag或者点击以后移除事件。如果你的需求是点击以后再次进入页面也不能点击执行了,这里最好就通过发请求,通过后端返回的数据来判断是否可以点击来进行控制。
<input type="button" id="btn" value="点击">
<script>
function one(elm, event, fn) {
function todo() {
fn();
elm.removeEventListener(event, todo);
}
elm.addEventListener(event, todo);
}
var btn = document.getElementById('btn');
one(btn, 'click', function () {
alert('只执行一次');
})
</script>
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
5 回答2k 阅读
个人建议点击以后删除绑定的事件才是最靠谱的