gpt4 book ai didi

javascript - 事件的 onfocusout..alert 陷入无限循环

转载 作者:行者123 更新时间:2023-11-29 15:20:23 25 4
gpt4 key购买 nike

我已将 onfocusout 属性添加到我的 HTML 标记中,并在该函数中添加了一个警报,但该警报函数正在运行无限循环,因为它超出了该元素的焦点。

如何立即关闭该警报?

例如:

<html>
<body>
<input type="text" id="a" onfocusout="hello()" name="name" />
<script>
function hello(){
var x= document.getElementById("a").value.length;
if("x<6"){
alert("minimum 6 digits");
document.getElementById("a").value='';
document.getElementById("a").focus();
}
}
</script>
</body>
</html>

我的代码与运行无限警报的代码类似。

最佳答案

发生这种行为是因为当您使用 focus 时,它会重新附加 focusout 事件处理程序。所以你必须做的,首先是删除 focusout 事件处理程序,并在你的条件为 true

时再次附加它
if(x < 6){
alert("minimum 6 digits");
$("#a").val('');
$("#a").off("focusout");
$("#a").focus();
$("#a").on("focusout", hello);
}

此外,这还不够。因为当你将 ID 为 'a' 的输入的值设置为 '' 后,当你重新附加事件时,它会继续进入你的条件,因为当前值为 '' (这意味着它的长度为 0),并且会保持重新附加您的事件处理程序。因此,您需要另一个全局变量来检查当前状态是否正在检查

var check = false;

那么每次你想重新附加你的事件处理程序时你都需要检查那个变量,如果它是假的(意味着当前它没有检查),那么你可以重新附加。但会重新附加,您将该变量设置为 true。完成重新附加后,将该变量设置回 false。

  if (check == false)
{
if(x < 6){
check = true;
alert("minimum 6 digits");
$("#a").val('');
$("#a").off("focusout");
$("#a").focus();
$("#a").on("focusout", hello);
}
}
else
{
check = false;
}

演示:https://jsfiddle.net/t3aoenvd/

关于javascript - 事件的 onfocusout..alert 陷入无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44516267/

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