我在我的HTML标记中添加了onfocusout
属性,并在函数中添加了一个警报,但是警报函数正在运行无限循环,因为它不在该元素的焦点上。
如何立即关闭该提醒?
例如:
<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>
我的代码类似于运行无限警报的代码。
答案 0 :(得分:1)
这种情况正在发生,因为当您使用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;
然后你需要在每次想要重新附加事件处理程序时检查该变量,如果它是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;
}
答案 1 :(得分:0)
试试这个
<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>