gpt4 book ai didi

javascript - 函数变得不稳定

转载 作者:行者123 更新时间:2023-12-02 16:11:13 25 4
gpt4 key购买 nike

<!doctype html>
<html>
<head>
<script src="jquery.js"></script>
</head>
<body>
<script>
function fire1(){
$("#btn").click(function(){
unbind();
window.alert("First Fire...");
});
}

function fire2(){
$("#btn").click(function(){
unbind();
window.alert("Second Fire...");
});
}

function fire3(){
$("#btn").click(function(){
unbind();
window.alert("Third Fire...");
});
}

function unbind(){
$("#btn").unbind("click");
}
</script>
<button id="btn">
<h1>Select a button below to fire an action</h1>
</button>
<br>
<br>
<button onclick="fire1()">
1st Fire
</button>
&nbsp;&nbsp;
<button onclick="fire2()">
2nd Fire
</button>
&nbsp;&nbsp;
<button onclick="fire3()">
3rd Fire
</button>
&nbsp;&nbsp;
</body>
<style>
</style>
</html>

上面的代码将通过点击其下方的 3 个按钮来动态更改 $("#btn") 的点击方法。它仅适用于第一次点击。当您第二次单击它时,什么也没有发生。似乎 click 方法中的功能变得不稳定。谁能给我解释一下为什么吗?

最佳答案

发生这种情况是因为您在点击时取消了事件绑定(bind)...

function fire1(){
unbind();
$("#btn").click(function(){
window.alert("First Fire...");
});
}

将取消绑定(bind)放在前面将删除单击操作,然后设置新的单击事件。您所做的是删除按钮单击时的所有单击事件,从而删除第二次单击的事件操作。

如果您想避免使用事件而只是更改按钮的行为,则可以在事件处理程序中调用命名函数,并根据其他按钮的点击来更改它。

$(document).ready(function(){
var myClickHandler = function(){};
$('btn').click(function(){myClickHandler();});

function fire1(){
myClickHandler = function(){
window.alert("First Fire...");
};
}
function fire2(){
myClickHandler = function(){
window.alert("Second Fire...");
};
}

function fire3(){
myClickHandler = function(){
window.alert("Third Fire...");
};
}
});

关于javascript - 函数变得不稳定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30162383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com