应为现在的项目需求问题,js比较复杂,所以我的js就分开写了
<script language="javascript" type="text/javascript" src="static/js/followupjs/followup.js"></script>//单击提交时的保存操作
function drugmainjs() {
var codestr = "";
var valuestr="";
var drugsvaluestr = "";
var variablestr="";
var myDate = new Date();
var s = myDate.getTime();
var test = document.mainForm.Sf_Date.value;   //测试得到了随访时间的值

var f = document.mainForm; //得到表单对象
var hashMap=new HashMap(); 
for(var j=0;j<f.length;j++){
hashMap.put(f[j].id,f[j]);
}
       //保存当前模块中的数据
for(var i=0;i<vcodes.length;i++){
var mView = document.mainForm.mname;
    var m = document.mainForm.mname.value;    //模块名称
var eDiv = document.getElementById("div_"+vcodes[i]);
//将界面所有显示着的变量code拼成字符串
    if(eDiv){
           if(eDiv.style.display=='block'){
            variablestr+=vcodes[i]+";";
            }
            } 
            if(vmodes[i]==m){
if(hashMap.get(vcodes[i]).type=="text"){//输入题或日期时间题或日期题或下拉列表题
             if(hashMap.get(vcodes[i]).value!=""){//表单对象value有值
             idstr+=vids[i]+";";//将变量id拼成字符串
             //codestr+=vcodes[i]+";";//将变量code拼成字符串
             codestr+=vcodes[i]+",";//将变量code拼成字符串
                 valuestr+="'"+hashMap.get(vcodes[i]).value+"'"+",";//将变量value拼成字符串
             }else{//表单对象value无值
             if(mView.style.display!='none'){//20120330lyd模块div显示
             if(eDiv){
             if(eDiv.style.display=='block'){
             alert(vcnames[i]+"\n不能为空");//20120408lyd新增
             return;//20120408lyd新增
             }
             }
            
             }
             }
            }else if(hashMap.get(vcodes[i]).type=="radio"){//单选题
             if(mView.style.display!='none'){//20120330lyd
             if(eDiv){
             if(eDiv.style.display=='block'){
             if(isRadio(hashMap.get(vcodes[i]).name)==""){//name为f[j].name的一组单选按钮全部没有选中
                 for(var h=0;h<tcodes.length;h++){
                 if(hashMap.get(vcodes[i]).name==tcodes[h]){
                 alert(tcnames[h]+"\n不能为空");//提示单选的文本题目不能为空
                 return;
                 }
                 }
                 }
             }
             }
             }
            
                if(hashMap.get(vcodes[i]).checked){ //单选选中
                  //如果用药单选题选中是,则进行药品名称的逻辑判断
                  var y = isRadio(hashMap.get(vcodes[i]).name);
                  if(y==2){
                   //详细药品名称的判断
                   var vcode = vcodes[i].split('_');
                   for(var k=0;k<drugs_did.length;k++){
         var drugs = hashMap.get(drugs_did[k]).name.split('_');
         if(vcode[1]==drugs[1]){
if(isCheckbox(hashMap.get(drugs_did[k]).name)==""){//name为f[j].name的一组多选按钮全部没有选中
//for(var h=0;h<drugs_ddid.length;h++){
     //if(hashMap.get(drugs_did[k]).name==drugs_ddid[h]){
//alert("'"+drugs_cname[k]+"'中的药品名称"+"\n不能为空");//提示单选的文本题目不能为空
//return;                    
//}                                     
//}                              
}else if(hashMap.get(drugs_did[k]).checked){
//这里要不把药品名称value弄成一个字段,用ID号来区分是什么药品                    
     drugsvaluestr+=hashMap.get(drugs_did[k]).value+";";//将变量value拼成字符串             
}
         }
}
                  }
                  idstr+=vids[i]+";";//将变量id拼成字符串
                     codestr+=hashMap.get(vcodes[i]).name+",";//将变量code拼成字符串
                  //valuestr+=hashMap.get(vcodes[i]).value+";";//将变量value拼成字符串
                  valuestr+="'"+hashMap.get(vcodes[i]).value+"'"+",";//将变量value拼成字符串
                }
             }else if(hashMap.get(vcodes[i]).type=="checkbox"){//多选题
             if(mView.style.display!='none'){//20120330lyd
             if(eDiv){
             if(eDiv.style.display=='block'){
             if(isCheckbox(hashMap.get(vcodes[i]).name)==""){//name为f[j].name的一组多选按钮全部没有选中
                 for(var h=0;h<tcodes.length;h++){
                 if(hashMap.get(vcodes[i]).name==tcodes[h]){
                 //alert(tcnames[h]+"\n不能为空");//提示单选的文本题目不能为空
                 //return;
                 }
                 }
                 }
             }
             }
             }
                if(hashMap.get(vcodes[i]).checked){ //多选选中
              idstr+=vids[i]+";";//将变量id拼成字符串
                     //codestr+=vcodes[i]+";";//将变量code拼成字符串
                     codestr+=vcodes[i]+",";//将变量code拼成字符串
                  valuestr+="'"+hashMap.get(vcodes[i]).value+"'"+",";//将变量value拼成字符串
                }
            }else if(hashMap.get(vcodes[i]).type=="select-one"){//下拉列表
             if(hashMap.get(vcodes[i]).value!="-1"){//下拉列表的value不为空
             idstr+=vids[i]+";";//将变量id拼成字符串
             //codestr+=vcodes[i]+";";//将变量code拼成字符串
             codestr+=vcodes[i]+",";//将变量code拼成字符串
valuestr+="'"+hashMap.get(vcodes[i]).value+"'"+",";//将变量value拼成字符串
                 //valuestr+=hashMap.get(vcodes[i]).value+";";//将变量value拼成字符串
             }else{
             if(mView.style.display!='none'){//20120330lyd
             if(eDiv){
             if(eDiv.style.display=='block'){
             alert(vcnames[i]+"\n不能为空");
             return;
             }
             }
             }
             }
            }
}
}
  var user = "<%=user.getUname()%>";
  if(user!="null"&&user!=""){ 
  testMessageBox(event);
  myDate = new Date();
  var e = myDate.getTime(); 
   if(idstr.lastIndexOf(";")!=-1){// 拼最后一个id时,idstr字符串最后一个字符为;
       idstr = idstr.substring(0,idstr.lastIndexOf(";"));// 去掉最后的;字符
   }
   if(codestr.lastIndexOf(",")!=-1){//拼最后一个code时,codestr字符串最后一个字符为;
       codestr = codestr.substring(0,codestr.lastIndexOf(","));//去掉最后的;字符
   }
   if(valuestr.lastIndexOf(",")!=-1){//拼最后一个value时,valuestr字符串最后一个字符为;
       valuestr = valuestr.substring(0,valuestr.lastIndexOf(","));//去掉最后的;字符
   }
   if(variablestr.lastIndexOf(";")!=-1){// 拼最后一个显示的变量code时,variablestr字符串最后一个字符为;
       variablestr = variablestr.substring(0,variablestr.lastIndexOf(";"));// 去掉最后的;字符
   }
   if(drugsvaluestr.lastIndexOf(";")!=-1){
       drugsvaluestr = drugsvaluestr.substring(0,drugsvaluestr.lastIndexOf(";"));// 去掉最后的;字符
   }
   //alert(idstr);alert(codestr);alert(valuestr);
   document.mainForm.vid.value=idstr;//将idstr字符串赋给name为vid的表单隐藏域
   document.mainForm.vcode.value=codestr;//将codestr字符串赋给name为vcode的表单隐藏域
   document.mainForm.vvalue.value=valuestr;//将valuestr字符串赋给name为vvalue的表单隐藏域
   document.mainForm.variable.value=variablestr;//将valuestr字符串赋给name为vvalue的表单隐藏域
   document.mainForm.dvalue.value=drugsvaluestr;//将drugsvaluestr字符串赋给name为dvalue的表单隐藏域
   var tag = "<%=tag%>";//获得修改或查看的标志
   var url;
   //alert(variablestr);    document.mainForm.action="followupmain.do?operate=doFollowupAddValue&pid=<%=pid%>&mname="+m+"&vid="+idstr+"&vcode="+codestr+"&vvalue="+valuestr+"&variable="+variablestr+"&dvalue="+drugsvaluestr+"&time=<%=time%>"+"&state=end";   
   document.mainForm.submit();// 提交表单   
   }else{
    alert("登陆超时,请重新登录!");
    window.navigate("login.jsp");  
    }
}
现在的问题是
(1)当我改动了引入的那部分js后,部署到服务器上后,用户需要清空缓存才行(每次改动,不能叫所有的用户清缓存吧???)
(2)下面写在页面中的js,有时if判断中的部分地方不执行(这点我很郁闷啊~!)最后,求大神帮帮我啊~!

解决方案 »

  1.   

    1. 比如外联js当前版本号是 src="***.js?v=20121114" (日期),明天你改了***.js?v=20121115, 这样更新之后的请求连接不一样了,客户端就会加载最新的版本
    2.哪些地方不执行? 查看逻辑,代码兼容性。 建议firebug调试下。
      

  2.   

    1)js的url后面加个时间戳  即可2)一个断点调试就能解决的问题 要毛大神
      

  3.   


    第二个问题很是奇怪~!是这样的 if(vmodes[i]==m){}
    这个if里面的东西,当我firebug后就能执行,但是如果我刚刚部署到tomcat中,在页面中填写内容时候就不执行其中单选题那部分~!不知道我的描述是否清楚
      

  4.   

    vmodes 和 m 分别是什么?
      

  5.   


            var m = document.mainForm.mname.value;    //模块名称 var vmodes = [];// 记录变量的模块名称
            //页面中传的值
    <script type="text/javascript">
    vids.push('<%=vt.getVaid() %>');
    vcodes.push('<%=vt.getPcode() %>');
    vcnames.push('<%=vt.getCname() %>');
    vstates.push('<%=vt.getState() %>');
    vmodes.push('<%=vt.getGid()%>');
    </script>
      

  6.   

    真是太奇怪了~!如果firebug就不会出现不执行的情况~!如果不firebug就会出现不执行
    如果不执行,得到的就是0值~!啊。郁闷啊~!!!求大神啊
      

  7.   

    //如果是单选按钮
    function isRadio(radioname){
      var b = "";
      var element = document.mainForm.elements[radioname];
      for(var i=0;i<element.length;i++){
          if(element[i].checked){
              b = element[i].value;
      return b;
          }
    }
      return b;
    }
    我发现问题出现在这个方法中~!b的值有时候会是0,得不到我想要的value
      

  8.   

    firebug中在if前敲入下面代码
    console.info(vmodes);
    console.info(m);
    看控制台输出(不调试输出)。
      

  9.   


    可以帮我看下这段代码//如果是单选按钮
    function isRadio(radioname){
       var b = "";
       var element = document.mainForm.elements[radioname];
       for(var i=0;i<element.length;i++){
           if(element[i].checked){
               b = element[i].value;
               return b;
           }
        }
       return b;
    }b的值为什么有的时候会是0呢??正确的应该是1,2,99
      

  10.   

    当第一次执行到return b的时候,就不在for循环了,b是不会有多个值的。
    b = element[i].value;替换成b += element[i]+',';
    去掉if里面的return b;
      

  11.   

    终于找到错误所在了~!谢谢大家了~!// 清空隐藏变量的值
    function setSpaceValue(vab){// 参数为变量name
    // alert("setSpaceValue")
    var element = document.mainForm.elements[vab];// 得到表单控件实体
    if(element){
    if(element.value){
    if(element.type=="select-one"){
    element.value="-1";
    }
    if(element.type=="text"){
    element.value="";
    }
    if(element.type=="checkbox" || element.type=="radio"){
    element.checked=false;
    //element.value="0";
    }
    }else if(element.length){
    for(var i=0;i<element.length;i++){
    element[i].checked=false;
    //element[i].value="1";  
    }
    }
    }
    }
    注释掉的是原来的代码~!这里给value赋值了0.。。累死了~!