昨天的沒說清楚..今天又來了.關於select and focus的問題

junguo 2002-09-14 11:26:08
看了下面的代碼
</html>
<head>
<script language="JavaScript">
function fnTest(obj)
{
var strValue=obj.id;
if(strValue!="222")
alert("Error"+strValue);
document.all(strValue).select();
document.all(strValue).focus();
return ;

}
</script>
</head>
<body>
<input type="text" value="111" name="t1" id="i1" onblur="fnTest(this)"/>
<input type="text" value="111" name="t1" id="i2" onblur="fnTest(this)"/>
<input type="text" value="111" name="t1" id="i3" onblur="fnTest(this)"/>
</body>
</html>
在點了第一個text後.會報錯..請修改..可這個時候.在點其他的text.就會出現死循環..

幫忙解答!!!
...全文
137 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
junguo 2002-09-14
  • 打赏
  • 举报
回复
喔..樓上說的不是重點了..我把判斷換成 if(obj.value!="222")即可了.可是
還是會出現如上的現象....
mybios 2002-09-14
  • 打赏
  • 举报
回复
</html>
<head>
<script language="JavaScript">
function fnTest(obj)
{
var strValue=obj.value;//这里应该取value值。而不是取id值
if(strValue!="222")
alert("Error"+strValue);
document.all(strValue).select();
document.all(strValue).focus();
return ;

}
</script>
</head>
<body>
<input type="text" value="111" name="t1" id="i1" onblur="fnTest(this)"/>
<input type="text" value="111" name="t1" id="i2" onblur="fnTest(this)"/>
<input type="text" value="111" name="t1" id="i3" onblur="fnTest(this)"/>
</body>
</html>
junguo 2002-09-14
  • 打赏
  • 举报
回复
我想作成
1.必須讓其更改正確了才可以離開.在點了其他的text後.還是不會觸發其他text的
事件.不會出現這樣的死循環..仍然讓其改錯誤的tesxt
junguo 2002-09-14
  • 打赏
  • 举报
回复
樓上的正解..果然解決了我的問題.謝謝了
alexxing 2002-09-14
  • 打赏
  • 举报
回复
赋值肯定是不管用的啦,怎么可能这么简单?
实际输入肯定不是固定的222啦,那样还要用户输入干啥?
楼主的用"222"只是个例子啦,实际肯定是按某种规则进行检查,例如按整数或者日期用正则表达式进行检查

加不加括号是次要的(楼主的笔误是够多的),关键是怎么防止事件重入,我用了一个标志,好像解决了这个问题

<html>
<head>
<script language="JavaScript">
var fEv = false;
function fnTest(obj)
{
if ( fEv ) return;
fEv = true;
var strValue = obj.value;
if ( strValue != "222" )
{
obj.select();
alert("Error"+strValue);
}
fEv = false;
}
</script>
</head>
<body>
<input type="text" value="111" name="t1" id="i1" onblur="fnTest(this)">
<input type="text" value="111" name="t1" id="i2" onblur="fnTest(this)">
<input type="text" value="111" name="t1" id="i3" onblur="fnTest(this)">
</body>
</html>

进入 onblur 事件就设置 fEv=true,下次再进入先判断 fEv,就可以避免死循环
潇洒 2002-09-14
  • 打赏
  • 举报
回复
哦..... 我刚才里面多了个 flag, 这个没用,可以删了. ..
本来想用这个来判断是否点下一个text 框的... 谁知不好使. :(
潇洒 2002-09-14
  • 打赏
  • 举报
回复
呵呵~ 括起来也没用的. 它的问题主要是三个 <input> 都加了
测试语句.
当从第一个框直接跳到第二个框的时候, 两个框的内容都不等于 222.
却又循环激活了 onblur 事件. 这样就会成了死循环.

我试了半天, 也没找出比较好的办法...... 最后只好用了个折中的办法
解决.(这个问题比较值得考虑, 希望能有高手有好的方法实现!)

西西.. 这个方法比较智能化, 既然它不等于"222",
你就自己设它为 222 嘛. 这样不就省了人家再输入一次的麻烦?!


</html>
<head>
<script language="JavaScript">

function fnTest(obj,flag)
{
if(obj.value!="222"){
alert("Error"+obj.value);
obj.value='222';
obj.select();
obj.focus();
return ;
}

}
</script>
</head>
<body>
<input type="text" value="111" name="t1" id="i1" onblur="fnTest(this)">
<input type="text" value="111" name="t1" id="i2" onblur="fnTest(this)">
<input type="text" value="111" name="t1" id="i3" onblur="fnTest(this)">
</body>
</html>
alexxing 2002-09-14
  • 打赏
  • 举报
回复
首先,我想你漏了 {}

if(strValue!="222")
{
alert("Error"+strValue);
document.all(strValue).select();
document.all(strValue).focus();
return ;
}

你这个跟昨天的程序不一样,原因类似,只不过昨天的帖子里是执行两次 alert,今天这个则肯定死循环了!

例如,当焦点从 i1 -> i2:

i2.focus() //浏览器触发
i1.blur() //浏览器触发
i1.focus() //因为 i1.blur 发现 i1.value != '222'()
i2.blur() //因为 i1.focus()
i2.focus() //因为 i2.blur 发现 i2.value != '222'()
...
(死循环)

所以肯定不能这样判断
foolishtiger 2002-09-14
  • 打赏
  • 举报
回复
把If后面的三条语句用{}括起来。

87,996

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧