运行环境是:tomcat5.5.7+struts2.0.11+spring2.5+hibernate3.2,网页内容如下(为了找出问题结症,已经把实质性内容去掉):<%@ page contentType="text/html;charset=GBK" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head><title>学生管理</title>
<!--<script type="text/javascript" src="/util.js"></script>-->
<script type="text/javascript">
function chkNameById(FldId) {
var Fld = document.getElementById(FldId);
Fld.value = trim(Fld.value);
if (Fld.value == "") {
alert("请填写名字!");
return false;
} else {
return true;
}
}
function trim(str) {
var newstr="";
var i=0;
while (i<str.length && str.charAt(i)==" ") {i++};
if (i<str.length) {
var j=str.length-1;
while (j>i && str.charAt(j)==" ") j--;
newstr=str.substring(i,j+1);
}
return newstr;
}
</script>
</head>
<body>
<div align="center">
班级:
<table>
<tr align="right">
<td>
<form action="addBatchStdts.action" method="post" enctype="multipart/form-data" onsubmit="return chkNameById('stdtsxls')">
<input type="file" id="stdtsxls" name="stdts_xls"/>
<input type="submit" name="Submit" value="上传学生名单"/>
</form>
</td>
</tr>
</table>
</div>
</body>
</html>该网页直接把javascript代码写在网页中,这个网页是能正常工作的。问题是当我把以上的代码写到一个独立的js文件时不能正常工作。也就是说,当我把<!--<script type="text/javascript" src="/util.js"></script>-->的注释标记去掉,把下面的javascript代码去掉后不能检测stdtsxls域是否填写了文件名,不管填没填文件名都是直接提交,没有任何提示。util.js文件如下:
function chkName(nameFld) {
nameFld.value=trim(nameFld.value);
if (nameFld.value=="") {
alert("请填写名字!");
return false;
} else {
return true;
}
}function chkNameById(FldId) {
var Fld=document.getElementById(FldId);
Fld.value=trim(Fld.value);
if (Fld.value=="") {
alert("请填写名字!");
return false;
} else {
return true;
}
}function trim(str) {
var newstr="";
var i=0;
while (i<str.length && str.charAt(i)==" ") {i++};
if (i<str.length) {
var j=str.length-1;
while (j>i && str.charAt(j)==" ") j--;
newstr=str.substring(i,j+1);
}
return newstr;
}我改成直接使用名字引用不是同样的现象。奇怪的是,这个文件在其它有些地方引用是能正常工作的。望哪位高手解释下。谢谢。
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head><title>学生管理</title>
<!--<script type="text/javascript" src="/util.js"></script>-->
<script type="text/javascript">
function chkNameById(FldId) {
var Fld = document.getElementById(FldId);
Fld.value = trim(Fld.value);
if (Fld.value == "") {
alert("请填写名字!");
return false;
} else {
return true;
}
}
function trim(str) {
var newstr="";
var i=0;
while (i<str.length && str.charAt(i)==" ") {i++};
if (i<str.length) {
var j=str.length-1;
while (j>i && str.charAt(j)==" ") j--;
newstr=str.substring(i,j+1);
}
return newstr;
}
</script>
</head>
<body>
<div align="center">
班级:
<table>
<tr align="right">
<td>
<form action="addBatchStdts.action" method="post" enctype="multipart/form-data" onsubmit="return chkNameById('stdtsxls')">
<input type="file" id="stdtsxls" name="stdts_xls"/>
<input type="submit" name="Submit" value="上传学生名单"/>
</form>
</td>
</tr>
</table>
</div>
</body>
</html>该网页直接把javascript代码写在网页中,这个网页是能正常工作的。问题是当我把以上的代码写到一个独立的js文件时不能正常工作。也就是说,当我把<!--<script type="text/javascript" src="/util.js"></script>-->的注释标记去掉,把下面的javascript代码去掉后不能检测stdtsxls域是否填写了文件名,不管填没填文件名都是直接提交,没有任何提示。util.js文件如下:
function chkName(nameFld) {
nameFld.value=trim(nameFld.value);
if (nameFld.value=="") {
alert("请填写名字!");
return false;
} else {
return true;
}
}function chkNameById(FldId) {
var Fld=document.getElementById(FldId);
Fld.value=trim(Fld.value);
if (Fld.value=="") {
alert("请填写名字!");
return false;
} else {
return true;
}
}function trim(str) {
var newstr="";
var i=0;
while (i<str.length && str.charAt(i)==" ") {i++};
if (i<str.length) {
var j=str.length-1;
while (j>i && str.charAt(j)==" ") j--;
newstr=str.substring(i,j+1);
}
return newstr;
}我改成直接使用名字引用不是同样的现象。奇怪的是,这个文件在其它有些地方引用是能正常工作的。望哪位高手解释下。谢谢。
楼主【wudeyan】截止到2008-06-28 21:11:21的历史汇总数据(不包括此帖):
发帖数:5 发帖分:130
结贴数:5 结贴分:130
未结数:0 未结分:0
结贴率:100.00% 结分率:100.00%
敬礼!
<meta http-equiv="Content-Type" content="text/html; charset=GBK"/>
理论上来说,这行应该对util.js不产生影响。权当死马当活马医吧,我把这一行粘贴上去,网页变成这样:
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK"/>
<title>......</title>
发现util.js竟然能正常工作了,神奇啊。然后我把meta行去掉,发现util.js还是能够正常工作(我对上天保证,我没改其它地方)。这时的网页与util.js不能正常工作时的网页相比,唯一区别就是原来的<head>和<title>写在同一行,现在的写成两行。BTW:今天写代码时又被类似问题折腾。我真是怕了javascript了。javascript的弱数据类型设计虽然带来了灵活的好处,但为之付出的代价是理解起来比较混乱,而且容易出错。
出现问题的页面一般可以在firefox下正常运行
后来实在不行了就吧js文件include进来,太烦人了