新足迹

 找回密码
 注册

精华好帖回顾

· 煮夫手记十四 烙馍卷菜 (2011-3-13) amon54 · (新加:豪宅装修照、遛蜥照!)在澳洲养异宠——鬃狮蜥(Bearded dragon)的饲养(多图长文) (2021-6-1) 海边小妹
· 海鲜焗饭&忌廉南瓜汤 (2007-12-15) 紫雪花 · 参加活动 事故之后-車報廢的經過#29更新 (2011-9-8) guguji
Advertisement
Advertisement
查看: 1563|回复: 15

[大大请进] 很简单的问题:javascript focus() [复制链接]

发表于 2011-7-5 21:53 |显示全部楼层
此文章由 porcorosso 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 porcorosso 所有!转贴必须注明作者、出处和本声明,并保持内容完整
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. <html>
  3.   <head>
  4.     <title></title>
  5.     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  6.   </head>
  7.   <body>
  8.       <input type="text" id="testme" value="">
  9.   </body>
  10.   <script type="text/javascript">
  11.     document.getElementById('testme').focus();
  12.     document.getElementById('testme').onblur = function(){
  13.         if(isNaN(this.value)){
  14.             alert('stay focus');
  15.             this.focus();
  16.             return false;
  17.         }
  18.     };
  19.   </script>
  20. </html>
复制代码
问题:按逻辑,testme如果不是Number就应该会被focus,但是试了很久都没办法。我是用Firefox5测的。各位可以看看,怎样才能让testme被focus(cursor在testme里头)?

IE没问题,好像就是Firefox/Chrome有问题。。。

[ 本帖最后由 porcorosso 于 2011-7-5 21:09 编辑 ]
Advertisement
Advertisement

2007 年度奖章获得者

发表于 2011-7-5 22:05 |显示全部楼层
此文章由 coolioo 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 coolioo 所有!转贴必须注明作者、出处和本声明,并保持内容完整
其实testme已经focus了,只是你看不到而已。
你再加个input,就会看到testme其实已经focus了。
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. <html>
  3.   <head>
  4.     <title></title>
  5.     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  6.   </head>
  7.   <body>
  8.       <input type="text" id="testme" value="">
  9.       <input type="text" id="testme2" value="">
  10.   </body>
  11.   <script type="text/javascript">
  12.     document.getElementById('testme').focus();
  13.     document.getElementById('testme').onblur = function(){
  14.         if(isNaN(this.value)){
  15.             alert('stay focus');
  16.             this.focus();
  17.             return false;
  18.         }
  19.     };
  20.   </script>
  21. </html>
复制代码

[ 本帖最后由 coolioo 于 2011-7-5 21:07 编辑 ]
C.B

发表于 2011-7-5 22:10 |显示全部楼层
此文章由 porcorosso 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 porcorosso 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 coolioo 于 2011-7-5 21:05 发表
其实testme已经focus了,只是你看不到而已。
你再加个input,就会看到testme其实已经focus了。


没错是focus了,但是cursor不在里头。。。这才是真正的问题
头像被屏蔽

禁止访问

发表于 2011-7-5 22:14 |显示全部楼层

同上

此文章由 atransformer 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 atransformer 所有!转贴必须注明作者、出处和本声明,并保持内容完整
头像被屏蔽

禁止访问

发表于 2011-7-5 22:15 |显示全部楼层

刚试了,IE8,cursor在里面。Firefox , 不在里面

此文章由 atransformer 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 atransformer 所有!转贴必须注明作者、出处和本声明,并保持内容完整
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
      <input type="text" id="testme" value="">
          <input type="text" id="testme2" value="">
  </body>
  <script type="text/javascript">
    document.getElementById('testme').focus();
    document.getElementById('testme').onblur = function(){
        if(isNaN(this.value)){
            alert('stay focus');
            this.focus();
            return false;
        }
    };
  </script>
</html>

[ 本帖最后由 atransformer 于 2011-7-5 21:17 编辑 ]

发表于 2011-7-5 22:30 |显示全部楼层
此文章由 乱码 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 乱码 所有!转贴必须注明作者、出处和本声明,并保持内容完整
这是known issue,tabbing时在ff/chrome不work,建议你用onkeyup来做validation.

我原来都是用这个,很好的一个jQuery plug-in,如果你有一个form,很多的input要validate,这个很好,如果就1-2个就算了,手工弄就行。

http://bassistance.de/jquery-plugins/jquery-plugin-validation/

[ 本帖最后由 乱码 于 2011-7-5 21:40 编辑 ]

评分

参与人数 2积分 +7 收起 理由
o2h2o + 3 牛啊 经验太丰富了
uowzd01 + 4 偶对你的景仰如滔滔江水

查看全部评分

Advertisement
Advertisement

2007 年度奖章获得者

发表于 2011-7-5 22:36 |显示全部楼层
此文章由 coolioo 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 coolioo 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 乱码 于 2011-7-5 21:30 发表
这是known issue,tabbing时在ff/chrome不work,建议你用onkeyup来做validation.


姜还是老的辣呀
C.B

发表于 2011-7-5 22:38 |显示全部楼层
此文章由 porcorosso 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 porcorosso 所有!转贴必须注明作者、出处和本声明,并保持内容完整
乱码改名叫辣码好了,呵呵呵

开玩笑的
头像被屏蔽

禁止访问

发表于 2011-7-5 22:42 |显示全部楼层
此文章由 atransformer 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 atransformer 所有!转贴必须注明作者、出处和本声明,并保持内容完整
[quote]原帖由 乱码 于 2011-7-5 21:30 发表
这是known issue,tabbing时在ff/chrome不work,建议你用onkeyup来做validation.

我原来都是用这个,很好的一个jQuery plug-in,如果你有一个form,很多的input要validate,这个很好,如果就1-2个就算了,手工弄就行。

http://bas ... [/quote

onkeyup也有问题。 如果你连续键入多个字符。 会出现多个 alert

发表于 2011-7-5 22:47 |显示全部楼层
此文章由 乱码 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 乱码 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 atransformer 于 2011-7-5 21:42 发表
[quote]原帖由 乱码 于 2011-7-5 21:30 发表
onkeyup也有问题。 如果你连续键入多个字符。 会出现多个 alert


嗯,this point is valid , haha~~

发表于 2011-7-6 00:19 |显示全部楼层
此文章由 Dan.and.Andy 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 Dan.and.Andy 所有!转贴必须注明作者、出处和本声明,并保持内容完整
mark 一下,去睡觉了,明天早上说说这个问题和解决方案。
Advertisement
Advertisement

发表于 2011-7-6 09:50 |显示全部楼层
此文章由 frankren 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 frankren 所有!转贴必须注明作者、出处和本声明,并保持内容完整
It looks this is working in firefox5, after you set a timeout. Don't know the reason(from google).

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
      <input type="text" id="testme" value=""><br />
      <input type="text" id="Text1" value="">
  </body>
  <script type="text/javascript">
      var a = document.getElementById('testme');
    document.getElementById('testme').focus();
    document.getElementById('testme').onblur = function() {
        if (isNaN(this.value)) {
            alert('stay focus');
            setTimeout("a.focus()", 250);
            //            this.focus();
            return false;
        }
    };
  </script>
</html>

[ 本帖最后由 frankren 于 2011-7-6 09:01 编辑 ]
头像被屏蔽

禁止发言

发表于 2011-7-6 10:02 |显示全部楼层
此文章由 linkspeed 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 linkspeed 所有!转贴必须注明作者、出处和本声明,并保持内容完整
那是alert的缘故。不要用alert就可以了。

发表于 2011-7-6 10:16 |显示全部楼层
此文章由 Dan.and.Andy 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 Dan.and.Andy 所有!转贴必须注明作者、出处和本声明,并保持内容完整
有人比我还早。不是alert的原因,是w3c标准的关系,chrome和ff在focus event 时会遵守标准清理text range,有一个微小的延时,你如果使用如下代码即使时间设置为零一样工作。

....
            alert('stay focus');
            var el = this;
            setTimeout(function () { el.focus(); el.select(); }, 0);

            return false;
....

同时textbox全选,应该满足你的需要。

[ 本帖最后由 Dan.and.Andy 于 2011-7-6 09:20 编辑 ]

发表于 2011-7-6 10:23 |显示全部楼层
此文章由 porcorosso 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 porcorosso 所有!转贴必须注明作者、出处和本声明,并保持内容完整
白条先。。。

发表于 2011-7-6 10:29 |显示全部楼层
此文章由 porcorosso 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 porcorosso 所有!转贴必须注明作者、出处和本声明,并保持内容完整
试了一下
  1. setTimeout(function () { document.getElementById('testme').focus(); }, 0);
复制代码
都可以,不需要 select()

谢了各位~
Advertisement
Advertisement

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部