下面贴代码<td noWrap width="20%">
<div>
<textarea  id="msgContentArea" rows="15" cols="40"
onPropertyChange="javascript:setMsg();"></textarea>
<span><font color="red">*</font></span>
</div>
</td><th><app:i18n key="page.9.wordcount"/>:</th>
<td colspan="2">
<font color="red"><app:SmsContextTag form="PolicyFormBean" formfield="msgPreview" /> </font>
</td>
js代碼將textare中的值獲取到,在後臺判斷,在傳回前臺 function setMsg(){
//获取短信内容和签名状态
var previewMsg = "";
var msgContentArea=$("#msgContentArea");
previewMsg += msgContentArea.val();
var nameFlagObjs = document.getElementsByName("nameFlag");
var nameFlag = false;
var userName = "";
if(nameFlagObjs[1].checked){
nameFlag = true;
userName = document.getElementsByName("currentName")[0].value;
}
if(nameFlag)
previewMsg += "[" + userName + "]";
if(msgContentArea.val()=="")
previewMsg = "";
PolicyFormBean.msgPreview.value = previewMsg;
}
後臺程序 System.out.println(longsmsenglishlength);
System.out.println(longsmschineselength);
StringBuffer sb = new StringBuffer(); sb.append("<script language=\"javascript\">\n");
sb.append("var submitflag = false;\n");
sb.append("function checkSmsContext(send_content){\n");


//sb.append("alert(send_content);");

sb.append("var strlength=0;\n");
sb.append("var iList=0;\n");
sb.append("var maxlengths=134;\n");
sb.append("var firstmax=140;\n");
sb.append("send_content = send_content.replaceAll('\\r','');\n");

//sb.append("alert(send_content);");

sb.append("if( isChinese( send_content ) ){\n");
sb.append("firstmax=140;\n");
sb.append("strlength = send_content.length * 2;\n");
sb.append("}else{\n");
sb.append("firstmax=140;\n");
sb.append("strlength = send_content.length;\n");
sb.append("} \n");
sb.append("if( strlength<=firstmax ){\n");
sb.append("iList=1;");
sb.append("}else{\n");
sb.append("if( strlength%maxlengths==0 ){\n");
sb.append("iList = parseInt( strlength/maxlengths );\n");
sb.append("}else{\n");
sb.append("iList = parseInt( strlength/maxlengths ) + 1;\n");
sb.append("}\n");
sb.append("}\n");
sb.append("if(strlength >800){\n");
sb.append("submitflag=false;}\n");
sb.append("else{\n");
sb.append("submitflag=true;\n");
sb.append("}\n");


sb.append("document.getElementsByName(\"sms_contextlimit\")[0].innerHTML=\" " + ResourceLoad.getValueByKey("public.messagemaxlength") + " \"+"
+ longsmsenglishlength + "+ \" " + ResourceLoad.getValueByKey("public.byte") + ".\"+\n\"" 
+ ResourceLoad.getValueByKey("public.hadinput") + "\"+strlength+\" " + ResourceLoad.getValueByKey("public.byte")
+ "," + ResourceLoad.getValueByKey("public.devided") + " \"+iList+\" " + ResourceLoad.getValueByKey("public.item") + " "
+ ResourceLoad.getValueByKey("public.send") + ".<br>" + ResourceLoad.getValueByKey("public.onlyreference") + "\"; }\n");



sb.append("\n");
sb.append("String.prototype.replaceAll = function(s1,s2) { \n");
sb.append("return this.replace(new RegExp(s1,\"gm\"),s2);  \n");
sb.append("}\n");  
                              
sb.append("setInterval(function(){checkSmsContext(" + form + "." + formfield
+ ".value) },1000);\n ");


sb.append("function isChinese(str){\n");
sb.append("iLength = str.length;\n");
sb.append("for(i=0;i<iLength;i++){\n");
sb.append("var tmp_code = str.substring(i,i+1).charCodeAt(); \n");
sb.append("if( tmp_code> 0xff ){\n");
sb.append("return true;\n");
sb.append("}\n");
sb.append("}\n");
sb.append("return false;\n");
sb.append("}\n");

sb.append("</script>\n");
sb.append("\n");
sb.append("<div id=\"sms_contextlimit\" name=\"sms_contextlimit\" class=\"STYLE3\"/>\n");
return sb.toString();在ie下是可以識別這個的  sb.append("setInterval(function(){checkSmsContext(" + form + "." + formfield
+ ".value) },1000);\n ");也就是
PolicyFormBean.msgPreview.value可safari,chrome,ff都不行  報id位於全局範圍,這個是什麽情況很急,謝謝大家

解决方案 »

  1.   

    试试:document.getElementById("msgPreview").value或者:
            sb.append("function checkSmsContext(o){\n");
           sb.append("var send_content=document.getElementById(\"o\").value");
            
            //sb.append("alert(send_content);");
            
            sb.append("var strlength=0;\n");
    sb.append("setInterval(function(){checkSmsContext(" + formfield+ ") },1000);\n ");
      

  2.   

    sb.append("setInterval(function(){checkSmsContext('" + formfield+ "') },1000);\n ");修正一下
      

  3.   

     sb.append("function checkSmsContext(o){\n");
           sb.append("var send_content=document.getElementById(o).value");
            
            //sb.append("alert(send_content);");
            
            sb.append("var strlength=0;\n");sb.append("setInterval(function(){checkSmsContext('" + formfield+ "') },1000);\n ");
      

  4.   


    试过了,不行
    而且您的这句话是什么意思?
    sb.append("setInterval(function(){checkSmsContext('" + formfield+ "') },1000);\n ");formfield是通过页面传过来的值,在formbean中有相对应的值
    当前formfield也就是msgPreview
    PolicyFormBean.msgPreview.value
      

  5.   

    修改了两个地方
    1:计时器中传参为formfield
    2:checkSmsContext变更参数为:formfield,
    将你原有的参数:send_content变更为:var send_content=document.getElementById(formfield).value去获取值你把整个服务器解析后生成的完整HTML贴出来就知道了,我在你贴的代码里没有看到msgPreview在哪里