<html> <head> <title>test.html</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="this is my page"> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <script type="text/javascript" src="scripts/jquery.js"></script> <script type="text/javascript"> $(document).ready(function(){ $("#t1,#t2").blur(function(){ $(this).val().length==0 $(this).focus(); }); }); </script> </head> <body> <form name="Name" action="post"><input name="textfield" id="t1" type="text"> <input name="textfield" id="t2" type="text">
<input name="Submit" type="submit" value="Submit">
</form> </body> </html>
就是一个 text(t1) 获得焦点后 点击另一个 text(t2)
cpu就上去了
貌似死循环
有人来解释一下吗?
问题补充:
to: bohemia (资深程序员)
我用 blue 只是为了让体验更好
记得好像以前用自己写的js
类似功能好象此没有问题
所以最最好不要在blur中处理;
hehe..你想他循环,他不循环都不行;
你上面 的代码相当于
[code="java"] $("#t1").blur(function(){
$(this).val().length==0
$(this).focus();
});
$("#t2").blur(function(){
$(this).val().length==0
$(this).focus();
}); [/code]
对每个输入框失去焦点的时候,立刻进行聚焦;
但是:
当t1聚焦的时候,t2未开始出发正常;
当t1取消聚焦的时候,t1自动获取焦点,也正常;
不正常的是:
当t1的聚焦是由于t2获取焦点引起的,
即:t1失去焦点;t2获取焦点; 然后t1聚焦;这个时候t2也失去了焦点,t2又开始聚焦,这样开始循环了.
所以这个时候,t2在获取焦点后也处理和t1相同的逻辑; 这个时候两者就开始循环了.
[quote]我用 blue 只是为了让体验更好
记得好像以前用自己写的js
类似功能好象此没有问题 [/quote]
这个跟自己写js和是否用jQuery没关系的;都是同样的结果;
当然不是bug,blur触发的是焦点离开的事件,[code="javascript"]$("#t1,#t2").blur(function(){})[/code]你这样同时注册到两个元素上,然后function里又是有[code="javascript"]$(this).focus();[/code],有移动焦点的操作,如果焦点在#t1,你点#t2时,会调用#t1的blur事件,然后执行#t1的这个focus(),这时焦点不在#t2上会调用#t2的blur,焦点又回到#t2上,然后。。。
一直这样下去,死循环。
不是jquery的bug
解决办法如下:
[code="javascript"]
<META http-equiv=keywords content=keyword1,keyword2,keyword3>
<META http-equiv=description content="this is my page">
<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
<script src="http://code.jquery.com/jquery-latest.js"></script>
<SCRIPT type=text/javascript>
$(document).ready(function(){
var isActive=false;
$("#t1,#t2").blur(function(){
if(!isActive&&$(this).val().length==0){
isActive=true;
$(this).focus();
}else{
isActive=false;
}
});
});
</SCRIPT>
<FORM name=Name action=post><P>
<INPUT id=t1 name=textfield>
<INPUT id=t2 name=textfield>
</P>
<P>
<INPUT type=submit value=Submit name=Submit>
</P>
</FORM>
<BODY>
[/code]