在鼠标事件中若">

网页的DOCTYPE HTML public 会导致页面的部分事件不触发

80酷酷网    80kuku.com

  网页|页面

最近忙着做JS,在JS里头有用到鼠标的一些事件时,通常我都是把鼠标事件包含在一个JS文件中调用
<script type="text/javascript" src="js/sb_cd.js"></script>

在鼠标事件中若包含如下鼠标的特效,就会导致事件触发:js/sb_cd.js
// JavaScript Document 

var sb_cd_a_Colour='fff000';
var sb_cd_b_Colour='00ff00';
var sb_cd_c_Colour='ff00ff';
var sb_cd_Size=120;

var sb_cd_YDummy=new Array(),sb_cd_XDummy=new Array(),sb_cd_xpos=0,sb_cd_ypos=0,sb_cd_ThisStep=0;sb_cd_step=0.6;
if (document.layers){
window.captureEvents(Event.MOUSEMOVE);
function sb_cd_nsMouse(evnt){
sb_cd_xpos = window.pageYOffset+evnt.pageX+6;
sb_cd_ypos = window.pageYOffset+evnt.pageY+16;
}
window.onMouseMove = sb_cd_nsMouse;
}
else if (document.all)
{
function sb_cd_ieMouse(){
sb_cd_xpos = document.body.scrollLeft+event.x+6;
sb_cd_ypos = document.body.scrollTop+event.y+16;
}
document.onmousemove = sb_cd_ieMouse;
}

function sb_cd_swirl(){
for (i = 0; i < 3; i++)
 {
 sb_cd_YDummy[i]=sb_cd_ypos+sb_cd_Size*Math.sin((1*Math.sin((sb_cd_ThisStep)/10))+i*2)*Math.sin((sb_cd_ThisStep)/4);
 sb_cd_XDummy[i]=sb_cd_xpos+sb_cd_Size*Math.cos((1*Math.sin((sb_cd_ThisStep)/10))+i*2)*Math.sin((sb_cd_ThisStep)/4);
 }
sb_cd_ThisStep+=sb_cd_step;
setTimeout('sb_cd_swirl()',10);
}

var sb_cd_amount=10;
if (document.layers){
for (i = 0; i < sb_cd_amount; i++)
{
document.write('<layer name=sb_cd_nsa'+i+' top=0 left=0 width='+i/2+' height='+i/2+' bgcolor='+sb_cd_a_Colour+'></layer>');
document.write('<layer name=sb_cd_nsb'+i+' top=0 left=0 width='+i/2+' height='+i/2+' bgcolor='+sb_cd_b_Colour+'></layer>');
document.write('<layer name=sb_cd_nsc'+i+' top=0 left=0 width='+i/2+' height='+i/2+' bgcolor='+sb_cd_c_Colour+'></layer>');
}
}
else if (document.all){
document.write('<div id="sb_cd_ODiv" id="sb_cd_IDiv" (i = 0; i < sb_cd_amount; i++)
{
document.write('<div id=sb_cd_x id=sb_cd_y id=sb_cd_z sb_cd_prepos(){
var sb_cd_ntscp=document.layers;
var sb_cd_msie=document.all;
if (document.layers){
for (i = 0; i < sb_cd_amount; i++)
{
 if (i < sb_cd_amount-1)
 {
 sb_cd_ntscp['sb_cd_nsa'+i].top=sb_cd_ntscp['sb_cd_nsa'+(i+1)].top;sb_cd_ntscp['sb_cd_nsa'+i].left=sb_cd_ntscp['sb_cd_nsa'+(i+1)].left;
 sb_cd_ntscp['sb_cd_nsb'+i].top=sb_cd_ntscp['sb_cd_nsb'+(i+1)].top;sb_cd_ntscp['sb_cd_nsb'+i].left=sb_cd_ntscp['sb_cd_nsb'+(i+1)].left;
 sb_cd_ntscp['sb_cd_nsc'+i].top=sb_cd_ntscp['sb_cd_nsc'+(i+1)].top;sb_cd_ntscp['sb_cd_nsc'+i].left=sb_cd_ntscp['sb_cd_nsc'+(i+1)].left;
 }
else 
 {
 sb_cd_ntscp['sb_cd_nsa'+i].top=sb_cd_YDummy[0];sb_cd_ntscp['sb_cd_nsa'+i].left=sb_cd_XDummy[0];
 sb_cd_ntscp['sb_cd_nsb'+i].top=sb_cd_YDummy[1];sb_cd_ntscp['sb_cd_nsb'+i].left=sb_cd_XDummy[1];
 sb_cd_ntscp['sb_cd_nsc'+i].top=sb_cd_YDummy[2];sb_cd_ntscp['sb_cd_nsc'+i].left=sb_cd_XDummy[2];
 }
}
}
else if (document.all){
for (i = 0; i <  sb_cd_amount; i++)
{
 if (i < sb_cd_amount-1)
 {
 sb_cd_msie.sb_cd_x[i].style.top=sb_cd_msie.sb_cd_x[i+1].style.top;sb_cd_msie.sb_cd_x[i].style.left=sb_cd_msie.sb_cd_x[i+1].style.left;
 sb_cd_msie.sb_cd_y[i].style.top=sb_cd_msie.sb_cd_y[i+1].style.top;sb_cd_msie.sb_cd_y[i].style.left=sb_cd_msie.sb_cd_y[i+1].style.left;
 sb_cd_msie.sb_cd_z[i].style.top=sb_cd_msie.sb_cd_z[i+1].style.top;sb_cd_msie.sb_cd_z[i].style.left=sb_cd_msie.sb_cd_z[i+1].style.left;
 }
else
 {
 sb_cd_msie.sb_cd_x[i].style.top=sb_cd_YDummy[0];sb_cd_msie.sb_cd_x[i].style.left=sb_cd_XDummy[0];
 sb_cd_msie.sb_cd_y[i].style.top=sb_cd_YDummy[1];sb_cd_msie.sb_cd_y[i].style.left=sb_cd_XDummy[1];
 sb_cd_msie.sb_cd_z[i].style.top=sb_cd_YDummy[2];sb_cd_msie.sb_cd_z[i].style.left=sb_cd_XDummy[2];
 }
}
}
setTimeout("sb_cd_prepos()",10);
}
function sb_cd_Start(){
sb_cd_swirl(),sb_cd_prepos()
}
var webSiteID = 6;window.onload=sb_cd_Start;


其中页面的代码如下:
当打开DW时,通常会先有这样预先定义好的代码,先看看第一行
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"
">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
</head>

<body>
<script type="text/javascript" src="js/sb_cd.js"></script>
</body>
</html>


问题找了很久,都不知道是什么地方的问题。后来才发现是DW生成的代码第一句
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"
">
使得这个鼠标事件不运行。,原来这里声明了后面的鼠标事件必须遵循这个DTD文档 的规则。
而不事件中的一些定义没有遵循,所以这个鼠标事件即不触发,也不报错。

官方是这样定义 DOCTYPE HTML PUBLIC 的

!DOCTYPE


指定了 HTML 文档遵循的文档类型定义(DTD)。

Microsoft® Internet Explorer 6 的新增内容

你可使用此声明将 Internet Explorer 6 及以后版本切换到标准兼容模式下。

语法

HTML 顶级元素  可用性 "注册//组织//类型 标签//定义  语言""URL"

可能值

顶级元素指定 DTD 中声明的顶级元素类型。这与声明的 SGML 文档类型相对应。
HTML默认。HTML。
可用性指定正式公开标识符(FPI)是可公开访问的对象还是系统资源。
PUBLIC默认。可公开访问的对象。
SYSTEM系统资源,如本地文件或 URL。
注册指定组织是否由国际标准化组织(ISO)注册。
+默认。组织名称已注册。
-组织名称未注册。Internet 工程任务组(IETF)和万维网协会(W3C)并非注册的 ISO 组织。
组织指定表明负责由 !DOCTYPE 声明引用的 DTD 的创建和维护的团体或组织的名称,即 OwnderID。
IETFIETF。
W3CW3C。
类型指定公开文本类,即所引用的对象类型。
DTD默认。DTD。
标签指定公开文本描述,即对所引用的公开文本的唯一描述性名称。后面可附带版本号。
HTML默认。HTML。
定义指定文档类型定义。
Frameset框架集文档。
Strict排除所有 W3C 专家希望逐步淘汰的代表性属性和元素,因为样式表已经很完善了。
Transitional包含除 frameSet 元素的全部内容。
语言指定公开文本语言,即用于创建所引用对象的自然语言编码系统。该语言定义已编写为 ISO 639 非链接 语言代码(大写两个字母)。
EN默认。英语。
URL指定所引用对象的位置。

注释

此声明必须出现在文档的起始处,出现在 html 标签之前。

!DOCTYPE 元素不需要关闭标签。

此元素在 Microsoft® Internet Explorer 3.0 的 HTML 中可用。

你可使用此声明在 Internet Explorer 6 及以后版本中切换为严格的标准兼容模式。若想打开此开关,请在你的文档顶部包含 !DOCTYPE 声明,在声明中指定合法的标签,在某些情况下,还需要指定定义和/或 URL。下面的表格列出了标准兼容模式的开关情况。

DOCTYPE出现 URL未出现 URL
未出现 DOCTYPE
HTML (无版本)
HTML 2.0
HTML 3.0
HTML 4.0
HTML 4.0 Frameset
HTML 4.0 Transitional
HTML 4.0 Strict
XHTML
XML
无法识别的 DOCTYPE
注意 在标准兼容模式下,不能保证与其它版本的 Internet Explorer 保持兼容。当打开标准兼容模式时,文档的渲染行为也许与将来版本的 Internet Explorer 不同。若内容本来就是固定的(如刻录在 CD 上),则不应该使用此模式。

示例

下面的例子演示了如何使用 !DOCTYPE 声明指定文档遵从的 DTD,并将 Internet Explorer 6 及更高版本切换到标准兼容模式。

下面例子中的声明都指定了遵从 HTML 4.0 DTD。第二种声明指定了“Strict”。第一种声明没有指定。这两种声明都将会把 Internet Explorer 6 及以后版本切换到标准兼容模式。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Strict//EN">

下面例子中的声明都指定了遵从“Transitional”HTML 4.0 DTD。第二种声明指定了 DTD 的 URL。第一种声明没有指定。第二种声明将会把 Internet Explorer 6 及以后版本切换到标准兼容模式。第一种声明不会。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"     "http://www.w3.org/TR/html4/loose.dtd">

标准信息



分享到
  • 微信分享
  • 新浪微博
  • QQ好友
  • QQ空间
点击: