我遇到一个问题,就是我的html前面如果加上<!doctype html>的话,那么body标签的event都不会有效
比如:
  
  <script type="text/javascript">
    <!--
          function m(event){ 
          x=event.clientX;
          y=event.clientY; 
          alert("X:"+x+",Y:"+y); 
          }
   //-->
    </script>
  </head>
    
<body onMousedown="m(event)">               
</body> 
如果去掉那个的话,就会有event响应了。还有去掉这个之后页面上的<input/>标签里的button都变小了一些。这个是为什么?这个<!doctype html>是干什么用的。

解决方案 »

  1.   


    <!Doctype html>是声明文档类型为HTML5类型,它强制要求了浏览器按某种规则去解析网页,所以能一定程度上解决兼容性问题,你之所以加了之后会变小,是因为你没加的时候那个按钮是按IE的规则解析的,加了之后就是按标准解析的,建议你还是按标准来解析,这样会少遇到很多麻烦
    至于event失效,可能是兼容性问题,你把function m(event){改成这样:
    function m(e){
    var evt=e || event;后面统一用evt就不会有问题了
      

  2.   

    试了一下 还真不好使。
    在chrome下事件没有响应,但是IE7 响应了。
    下面的链接 是这样解释的。我也不知道对不对,貌似是对。http://www.alixixi.com/ePrint.asp?from=dev&id=64026问题找了很久,都不知道是什么地方的问题。后来才发现是DW生成的代码第一句
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    使得这个鼠标事件不运行。,原来这里声明了后面的鼠标事件必须遵循这个DTD文档 的规则。
    而不事件中的一些定义没有遵循,所以这个鼠标事件即不触发,也不报错。
      

  3.   

    我试了下一楼的方法也不行,如果body里面有其他元素的话,点到那个元素上面是可以的。如果是空白什么都没有就不行,不知道为什么
      

  4.   

    css1compat下body没有内容时高为0,所以点击时没有点到body对象就没有触发事件,如果body有内容你点击内容就是点击到body了,触发了事件。不过firefox在css1compat下也响应有点怪,不知道是不是bug。。
      

  5.   

    谢谢楼上的回答,果然是跟body的高度有关,如果我把body设置个height就可以了。
      

  6.   

    其实DOCTYPE声明,因为很多时候团队里没有做规范应该用哪个,而且几种不同的编辑工具新建出的html页面标准也不同;这就可能一个jsp页面写了几百行甚至上千行了,然后发现某个样式必须要改DOCTYPE声明才能起作用了,这样是很悲哀的。
    所以平时用的三个规范中,如果没有特殊要求,首先应该摒弃<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
    这个框架规范,因为页面内不宜框架太多,这样页面间的交互很不好实现;
    然后是标准严格的规范<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    用了这个导致你不能使用任何表现层的标识和属性;
    所以在没有特殊要求的情况下,应该用<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    这个过渡规范,然后规范确定了,慢慢的调其余的功能和样式