运行环境是: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;
}我改成直接使用名字引用不是同样的现象。奇怪的是,这个文件在其它有些地方引用是能正常工作的。望哪位高手解释下。谢谢。

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【wudeyan】截止到2008-06-28 21:11:21的历史汇总数据(不包括此帖):
    发帖数:5                  发帖分:130                
    结贴数:5                  结贴分:130                
    未结数:0                  未结分:0                  
    结贴率:100.00%            结分率:100.00%            
    敬礼!
      

  2.   

    回楼上,我认为脚本编码没有问题。因为1、我把util.js中的函数直接复制到网页中可以正常工作。2、在同一系统的其它一些地方util.js可以正常工作。3、我把以上网页和util.js作为本地文件运行可以正常工作。
      

  3.   

    回楼上,这个页面和util.js我用IE以本地文件的方式打开是可以正常工作的。
      

  4.   

    而且,就象我贴上来的网页代码一样,我把util.js的相关代码原封不动地复制到网页中是可以正常工作的。
      

  5.   

    本地和服务是有区别的很可能路径不对所以先拿个可用的jsp改改先试一下
      

  6.   

    回楼上,不是路径的问题,这两天我折腾了一下,拿这个网页(下简称该网页)和util.js能正常工作的网页一行一行进行对比,发觉该网页在<head>和<title>之间少了一行
          <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的弱数据类型设计虽然带来了灵活的好处,但为之付出的代价是理解起来比较混乱,而且容易出错。
      

  7.   

    那天我真的就是加了一句meta这样的语句,从理论上说,这个语句跟javascript无关,实际上,当然也无关,那天的情况是这样的,加上meta之后,我的util.js正常工作了,然后我把meta行删除,发现util.js还能正常工作。和之前比,我的网页文件唯一的区别就是head和title之间插入了回车。
      

  8.   

    也遇到过这个该死的问题,而且几乎都是ie下的,
    出现问题的页面一般可以在firefox下正常运行
    后来实在不行了就吧js文件include进来,太烦人了