最近,在写一个JSP页面时,发现自己想调用的javascript代码功能使用异常,这段js代码主要实现某一区域(panel)的隐藏、显示。具体使用过程是:在将定义一panel里面放置输入框实现查询条件的输入,放置查询按钮,在该panel下放置一个按钮,点击该按钮或点击查询按钮后可以实现该panel向上滑动,从而达到该区域(panel)的自动隐藏,点击panel下的按钮可使区域向下滑动显示出内容。
这段功能的实现,是通过一段js代码实现的,以前一直没有问题,但这次使用却发现一个问题:即每次在向上、向下 滑动时,总是会“闪”一下。jsp/js代码是在执行正确的jsp页面拷贝过来的,所以,js代码不会有任何问题,代码结构与正确的jsp页面对比也无问题。对比调用的其它js代码也无问题。最后从jsp页面最开始处对比代码,发现jsp页面的第一行就出现问题:没有声明HTML<!DOCTYPE>。
代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
在w3school中找到有关DOCTYPE的说明:
定义和用法 <!DOCTYPE> 声明位于文档中的最前面的位置,处于 <html>标签之前。此标签可告知浏览器文档使用哪种 HTML 或 XHTML 规范。 该标签可声明三种 DTD类型,分别表示严格版本、过渡版本以及基于框架的 HTML文档。 示例: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
像我的jsp页面使用的就是过渡版本(Transitional)。
在上面的声明中,声明了文档的根元素是 html,它在公共标识符被定义为 "-//W3C//DTD XHTML 1.0 Strict//EN" 的 DTD 中进行了定义。浏览器将明白如何寻找匹配此公共标识符的 DTD。如果找不到,浏览器将使用公共标识符后面的 URL 作为寻找 DTD 的位置。
(注:DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块。它使用一系列的合法元素来定义文档结构。)
以下均是w3school教程中的内容,链接:http://www.w3school.com.cn/tags/tag_doctype.asp
HTMLHTML 4.01 规定了三种文档类型:Strict、Transitional 以及 Frameset。 HTML Strict DTD如果您需要干净的标记,免于表现层的混乱,请使用此类型。请与层叠样式表(CSS)配合使用: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" " http://www.w3.org/TR/html4/strict.dtd"> HTML Transitional DTDTransitional DTD 可包含 W3C所期望移入样式表的呈现属性和元素。如果您的读者使用了不支持层叠样式表(CSS)的浏览器以至于您不得不使用 HTML 的呈现特性时,请使用此类型: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " http://www.w3.org/TR/html4/loose.dtd"> Frameset DTDFrameset DTD 应当被用于带有框架的文档。除 frameset元素取代了 body 元素之外,Frameset DTD 等同于 Transitional DTD: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" " http://www.w3.org/TR/html4/frameset.dtd"> XHTMLXHTML 1.0 规定了三种 XML文档类型:Strict、Transitional 以及 Frameset。 XHTML Strict DTD同上(写者略) XHTML Frameset DTD当您希望使用框架时,请使用此 DTD! <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> 如需检查你是否编写了带有正确 DTD 的合法 XHTML 文档,您可以把您的 XHTML 页面链接到一个 XHTML 验证器。 |
其实现在我对具体原理还不太懂,也不知到底为什么加一这段声明后,“闪”的毛病就“治癒”了,但看来,要养成加<!DOCTYPE>的好习惯,遵守w3c。