关于JavaScript的位置问题
2008-09-14 10:32
295 查看
头两天写了一个程序,出现了无法识别的id值。下面我把代码贴出来:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
</HEAD>
<SCRIPT LANGUAGE="JavaScript">
<!--
var _table = document.getElementById("table1");
function deleRow()
{
_table.deleteRow(_table.rows.length-1);
}
function deleColum()
{
for(var i=0; i<_table.rows.length;i++)
{
var colum = _table.rows[0].cells.length;//获得第一列的格子数
_table.rows[i].deleteCell(colum-1);
}
}
}
//-->
</SCRIPT>
<BODY>
<TABLE name="table" id="table1" bordercolor="#00000" width="200" border="1">
<TR>
<TD>00</TD>
<TD>01</TD>
<TD>02</TD>
<TD>03</TD>
</TR>
<TR>
<TD>10</TD>
<TD>11</TD>
<TD>12</TD>
<TD>13</TD>
</TR>
<TR>
<TD>20</TD>
<TD>21</TD>
<TD>22</TD>
<TD>23</TD>
</TR>
</TABLE>
<br>
<input type="button" value="删除一行" onclick="deleRow()" >
<input type="button" value="删除一列" onclick="deleColum()" >
</BODY>
</HTML>
运行本程序出现的问题提示错误是:_table对象为空或不是对象。解决的方法先是把javascript放到<head>里,不行。现放到<body>里,还是不行。再生成单独的文件还是不行。最后上网搜到的方法是放到</html>后面,可以了。其实javascript加裁到html页面是顺序加载的,当放到<TABLE name="table" id="table1" bordercolor="#00000" width="200" border="1">之前的时候是无法识别到table1的,所以放在最后的时候可以。可是我觉得这样不好,本来javascript放到哪都可以的,后来再上网搜,才找到一个方法,就是在<script type="text/javascript"> 里面加个defer=true属性,一试,成功了。在单独的文件里也可以写加上defer,执行这个程序就ok了。
使用defer属性可以让脚本在整个页面装载完成之后再解析,而非边装载边解析。
这对于只包涵事件触发的js脚本而言,可以提高整个页面的加载速度。
DEFER是脚本程序强大功能中的一个“无名英雄”。你可能从没有使用过它,但是看完这里的介绍后,相信你就离不开它。它告诉浏览器Script段包含了无需立即执行的代码,并且,与SRC属性联合使用,它还可以使这些脚本在后台被下载,前台的内容则正常显示给用户。
最后请注意两点:
1、不要在defer型的脚本程序段中调用document.write命令,因为document.write将产生直接输出效果。
2、而且,不要在defer型脚本程序段中包括任何立即执行脚本要使用的全局变量或者函数。
但只支持IE,要多浏览器同时测试
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
</HEAD>
<SCRIPT LANGUAGE="JavaScript">
<!--
var _table = document.getElementById("table1");
function deleRow()
{
_table.deleteRow(_table.rows.length-1);
}
function deleColum()
{
for(var i=0; i<_table.rows.length;i++)
{
var colum = _table.rows[0].cells.length;//获得第一列的格子数
_table.rows[i].deleteCell(colum-1);
}
}
}
//-->
</SCRIPT>
<BODY>
<TABLE name="table" id="table1" bordercolor="#00000" width="200" border="1">
<TR>
<TD>00</TD>
<TD>01</TD>
<TD>02</TD>
<TD>03</TD>
</TR>
<TR>
<TD>10</TD>
<TD>11</TD>
<TD>12</TD>
<TD>13</TD>
</TR>
<TR>
<TD>20</TD>
<TD>21</TD>
<TD>22</TD>
<TD>23</TD>
</TR>
</TABLE>
<br>
<input type="button" value="删除一行" onclick="deleRow()" >
<input type="button" value="删除一列" onclick="deleColum()" >
</BODY>
</HTML>
运行本程序出现的问题提示错误是:_table对象为空或不是对象。解决的方法先是把javascript放到<head>里,不行。现放到<body>里,还是不行。再生成单独的文件还是不行。最后上网搜到的方法是放到</html>后面,可以了。其实javascript加裁到html页面是顺序加载的,当放到<TABLE name="table" id="table1" bordercolor="#00000" width="200" border="1">之前的时候是无法识别到table1的,所以放在最后的时候可以。可是我觉得这样不好,本来javascript放到哪都可以的,后来再上网搜,才找到一个方法,就是在<script type="text/javascript"> 里面加个defer=true属性,一试,成功了。在单独的文件里也可以写加上defer,执行这个程序就ok了。
使用defer属性可以让脚本在整个页面装载完成之后再解析,而非边装载边解析。
这对于只包涵事件触发的js脚本而言,可以提高整个页面的加载速度。
DEFER是脚本程序强大功能中的一个“无名英雄”。你可能从没有使用过它,但是看完这里的介绍后,相信你就离不开它。它告诉浏览器Script段包含了无需立即执行的代码,并且,与SRC属性联合使用,它还可以使这些脚本在后台被下载,前台的内容则正常显示给用户。
最后请注意两点:
1、不要在defer型的脚本程序段中调用document.write命令,因为document.write将产生直接输出效果。
2、而且,不要在defer型脚本程序段中包括任何立即执行脚本要使用的全局变量或者函数。
但只支持IE,要多浏览器同时测试
相关文章推荐
- JavaScript关于自调用循环函数解决代码加载顺序的问题
- 关于SpringBoot bean无法注入的问题(与文件包位置有关)改变自动扫描的包
- 关于SpringBoot bean无法注入的问题(与文件包位置有关)改变自动扫描的包
- 关于SpringBoot bean无法注入的问题(与文件包位置有关)改变自动扫描的包
- 关于在ViewDidLoad中修改控件的位置大小无效的问题
- 关于JavaScript的全局变量的问题
- 关于SpringBoot bean无法注入的问题(与文件包位置有关)
- 关于JavaScript中计算精度丢失的问题
- 关于JavaScript“跨域”问题的总结
- 关于网页标准与JAVAScript执行的问题
- 一个关于全局变量位置的问题
- Xcode-C语言出接触_关于求最大值最小值的位置问题
- 关于javascript数组与VB DLL中中数组的传递问题
- Javascript与ASP.NET(一般处理程序)关于URL(get方式)传递中文乱码问题的解决方案
- 关于Unity3D中ScrollView位置偏差问题
- 一个关于javascript匿名函数的问题
- 关于你没有权限在此位置中保存文件的问题解决
- javascript里面的确一些关于Width,Height,Top,Left的问题
- c语言训练题:关于张三李四王五说谎的问题(此处用javascript实现)
- 关于default的位置问题:default放在前面