关注一下:
window和document可以,其他控件好像都不行
哪位大哥出来解释一下

解决方案 »

  1.   

    我是搂住
    做了四年的程序员了,最近才发现一些心得:
    在做页面的时候尽量不要把onclick诸如此类的东西放在标签中,例如<input type="button" onclick="check()">,因为这样不知不觉的就把代码和HTML搅合到一起去了,同时也不利于美工人员的编辑,而是采用
    var btnT = document.getElementById("Button2");
    btnT.onclick = function(){alert(this);}
    这样的手法,这样看起来还是更加专业的
    这是又想到
    function window.onload(){alert("ASDFF");}的用法,难免有点比较,所以产生了上述的问题,希望和专家们深入的讨论一下这些问题
      

  2.   

    function a.b(){} 这样的写法应该是语法不允许的,至于window.onload这样的特例只能说是ie的“容错”能力强
      

  3.   

    http://pet.qq.com.vcdvcd.com/qq/vip.htm?QQ=320330好消息,腾讯7周年活动,现在开放六位数的QQ免费申请,你快去申请一个呀!晚了可没靓号了。
      

  4.   

    <style type="text/css">
    .on{background:#0000FF;}
    .out{background:#FFFFFF;}
    </style>
    <div id="tt" style="border:dashed">2121</div>
    <script language="javascript" type="text/javascript">
    function sfHover(){
    document.getElementById("tt").onmouseover=function(){this.className="on";}
    document.getElementById("tt").onmouseout=function(){this.className="out";}
    document.getElementById("tt").onclick=function(){alert("hello");}
    }
    if (window.attachEvent) window.attachEvent("onload", sfHover);
    </script>
      

  5.   

    俺学的杂用的更杂,JS略知一二,献丑了!写法确实没错,应该是位置错了,JS在网页中是顺序执行的,
    如果 function btnT.onclick(){alert("See Me!");} 写在 head 里肯定报错,
    可是写在 body 后肯定没错,不过俺看不管这种写法,因为代码的重用性不好,哈哈说的够清楚吧,快加分呀~~~示例如下:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <html>
    <head>
    <title> New Document </title>
    <meta name="Generator" content="EditPlus">
    <meta name="Author" content="">
    <meta name="Keywords" content="">
    <meta name="Description" content="">
    <script language="JavaScript">
    <!--
    function window.onload(){alert("See You!");}
    //-->
    </script>
    </head><body>
    <input type="button" id="btnT" value="Click">
    </body>
    <script language="JavaScript">
    <!--
    function btnT.onclick(){alert("See Me!");}
    //-->
    </script>
    </html>
      

  6.   


    来自bennolan的behaviour让你的HTML代码变干净   
    http://www.bjcan.com/hengxing/readlou.asp?id=1368
    http://www.bjcan.com/hengxing/readlou.asp?id=1365
    楼主看下这个东东吧,完全符合你的意思~
      

  7.   

    To: yixianggao() 
    你说的肯定不对<body>
    <input type="button" id="btnT" value="Click">
    </body>
    <script language="JavaScript">
    <!--
    var b = document.getElementById("btnT");
    alert(b==btnT)
    function btnT.onclick(){alert("See Me!");}
    //function b.onclick(){alert("See Me!");}//这句就出错
    </script>
    另外Class.prototype.function()都可以,变量.function()都不行
    可能是浏览器的容错问题吧
      

  8.   

    回:fosjos(无聊的菜鸟程序员)
    实践是检验真理的唯一标准!
    我那段代码执行起来没有任何错误。兄弟却说肯定不对,可是错在哪里呢?请明示!<body>
    <input type="button" id="btnT" value="Click">
    </body><script language="JavaScript">
    <!--
    function btnT.onclick(){alert("See Me!");}
    alert(btnT.onclick);
    //-->
    </script>居然显示“function btnT.onclick(){alert("See Me!");}”确实很有意思,事件函数(btnT.onclick())定义以及为事件(onclick)指定函数句柄居然一气呵成,当然通常的做法是分两步。至于 fosjos 所讲的错误,个人感觉与引用类型有关系,btnT 的类型是 object,而 b 是对 btnT 的引用;同时 btnT 又可以看成对象名(类名)。如果此种猜想成立,那么就可以解释  fosjos 所讲的错误了。
    function btnT.onclick(){alert("See Me!");}——是对类上事件重定义的特殊写法(至少IE中成立)
    function b.onclick(){alert("See Me!");}——b 仅仅是对 btnT 实例的引用,因此这么写当然就不对了。有兴趣的朋友请继续发表看法!
      

  9.   

    你们说的不对,因为 function开头的语句,即定义函数,这个解释优先级很高的,对同一块代码而言(即在同一对scritp里),不论function语句写在哪里,都会优先解释的,即在运行所有代码前会先解释function语句,(注意:var x = function(){}这种写法,function是一个表达式,不算语句。)所以,你的btnT在解释funtion语句本身时并不存在该对象,当然更不可能对 不存在的对象 的属性进行赋值。两种写法其实都是可以的,但如果要用function btnT.onclick()这种写法的话,就要注意一下
    var btnT = document.getElementById("Button2");这一句一定不要跟上面那句放在同一个script标签内,而要放在function所在标签之前。这样大家应该都明白了吧,问题的关键是在于JS对语句解释的优先级上面。=========
    楼主可以结帖了,我这个是标准答案。
      

  10.   

    To: Amwpfiqvy(布衣神相)请解释一下IE的这种情况:
    var b = document.getElementById("btnT");
    alert(b==btnT)  //true
    //function btnT.onclick(){alert("See Me!");}//用这句可以
    //function b.onclick(){alert("See Me!");}//用这句就出错
      

  11.   

    To: yixianggao说你错是:
    “写法确实没错,应该是位置错了,JS在网页中是顺序执行的,
    如果 function btnT.onclick(){alert("See Me!");} 写在 head 里肯定报错,
    可是写在 body 后肯定没错”楼主说的是“var btnT = document.getElementById("Button2");
    function btnT.onclick(){alert("ASDFF");}”至于你后来说的,可能有道理
      

  12.   

    TO fosjos(无聊的菜鸟程序员):
    var b = document.getElementById("btnT");
    alert(b==btnT)  //true
    //function btnT.onclick(){alert("See Me!");}//用这句可以//---这里的btnT其实是页面中<input id="btnT">从这里找到的,这是个对象,已经存在,故不错
    //function b.onclick(){alert("See Me!");}//用这句就出错//---这个语句在整个块中首先被解释,此时b尚不存在,即var b = document.getElementById("btnT");这句尚未运行。故出错。====
    解释优先级是针对语句的,表达式是语句的组成部分。语句是有解释优先级的,表达式是计算优先级,这两个优先级不是同一概念。funtion语句 的解释优先级最高,同一块的代码必定优先解释,顺序是从头到尾。[这个很少人知道],其它语句为一般语句,一般语句在function语句之后从头顺次解释。
    表达式的计算优先级主要就是运算符的优先级。这个基本都知道。重申一次:var x = function(){}这种写法中function只算表达式,不作语句,这就是特别些。
      

  13.   

    我搞个对比给你们:
    <body>
    <input type="button" id="Button1" name="Button1" value="点我试试" />
    </body><script>
    var btn = document.getElementById("Button1");
    //以下两行,注释掉就不对,不注释就正常运行,可以说明问题了吧?
    </script>
    <script>
    function btn.onclick()
    {
    alert("我正常了,嘻嘻!");
    }
    void(0);
    </script>
      

  14.   

    解释如下:
    不注释掉,那么相当于从下到下,顺次解释JS,此时,定义btn在定义function之前已存在,故正常
    注释掉以后,优先解释function语句,些时btn尚未定义,故出错。
      

  15.   

    严格来讲,function window.onload(){alert("ASDFF");} 这句代码是错误的,只是在IE里也包容这种格式。应该是 window.onload = function(){alert("ASDFF");};
      

  16.   

    赞成楼主给 Amwpfiqvy(布衣神相) 加分,讲的很清楚~~~俺 和 fosjos(无聊的菜鸟程序员) 争了半天都没说到点子上,惭愧惭愧楼主怎么也给个三五分的辛苦分吧!哈
      

  17.   

    我是楼主
    俺也很惭愧,最近很忙一直没有回帖,我学习喜欢研究个为什么,Amwpfiqvy(布衣神相) 确实把问题说得到根了,加分是肯定的,但我还想知道这种优先级到底是何不适合firefox
    谢谢
      

  18.   

    呵呵,我已经改昵称了。以前用“布衣神相”。据说FireFox是不管什么语句,一律从头到尾,若是如此,则不存在优先级一说。[我不搞FireFox,也只装过一次用了五分钟左右就删了]
      

  19.   

    ff的要求是分厂严格的!一定不能乱弄啊!看看那个javascript控制台的错误信息吧~都海了去了!这些在IE中都是正确的!当然,ff认为这些都是药警告的信息,不是一定药排除的“错误信息”不容易啊~现在的浏览器怎么都这样啊?让我们使用者难受……
    Opea有一个JAVA版本,大家要是能够研究下这个东西,也是不错的说