附测试代码如下,页面有2个input,设置为当失去焦点时判断是否为空,如果为空则将焦点置回,但是运行时出现问题,当焦点在Text1上时,如果不填入内容,直接点击Text2则会进入死循环,直到浏览器堆栈溢出,请教有何解决办法?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script src="js/jquery-1.4.4.js" type="text/javascript"></script>
<script language="javascript" type="text/javascript">
$(document).ready(function ()
{
$("#Text1").blur(function ()
{
if ($("#Text1").val() == "")
{
$("#Text1").focus();
}
});
$("#Text2").blur(function ()
{
if ($("#Text2").val() == "")
{
$("#Text2").focus();
}
});
});
</script>
</head>
<body>
<div>
<input id="Text1" type="text" /></div>
<div>
<input id="Text2" type="text" /></div>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script src="js/jquery-1.4.4.js" type="text/javascript"></script>
<script language="javascript" type="text/javascript">
$(document).ready(function ()
{
$("#Text1").blur(function ()
{
if ($("#Text1").val() == "")
{
$("#Text1").focus();
}
});
$("#Text2").blur(function ()
{
if ($("#Text2").val() == "")
{
$("#Text2").focus();
}
});
});
</script>
</head>
<body>
<div>
<input id="Text1" type="text" /></div>
<div>
<input id="Text2" type="text" /></div>
</body>
</html>
$("#Text1").focusout(function ()
{
if ($("#Text1").val() == "")
{
alert("不能为空");
$("#Text1").focus();
}
});
$("#Text2").focusout(function ()
{
if ($("#Text2").val() == "")
{
alert("不能为空");
$("#Text2").focus();
}
});
在focus()前要使用alert弹出对话框才能阻断焦点移到下一个元素上。很奇怪,也很郁闷。请高手解释下这个机制是怎么回事?有没有其他解决办法
自己解决牛人
alert获得了焦点,改变了焦点,个人估计
由于你在失去焦点的事件中写了,让元素重新得到焦点。所以就会焦点一旦移出此元素就会再次触发你的失去焦点事件... 反复就会循环的。你想要什么效果呢?