2013-07-12 197 views
0

這是寫在a.jsp代碼:調用JavaScript函數,不需要任何事件

<script type="text/javascript" > 
    function chk(d,e) 
    { 
    var x = d.split('/') 
    var y = e.split('/') 
    var a = new Date(x[2],x[0],x[1]) 
    var b = new Date(y[2],y[0],y[1]) 
    var c = (b - a) 
    var p= c/(1000 * 60 * 60 * 24); 
    } 
    </script> 

    <% String b="2013/07/12"; 
     String c="2013/07/14";%> 

    <script> 
    var myVar=chk('$b','$c'); 
    </script> 

    <body> 
    <% String st="<script>document.writeln(myVar)</script>"; 
     out.println("value="+st); %> 
    </body> 

我想天(即「P」),這兩個日期之間的數量(即「B」和'c')作爲輸出。但是我得到的輸出是「value = NaN」。這段代碼有什麼問題?請幫忙。

+0

您正在分割'/',但發送日期爲'-'。這可能嗎? –

+1

是生產代碼還是一些奇怪的扭曲運動? –

+0

@DustinLaine我真的懷疑'$ b'是Java scriptlet中的'b'變量。它至少應該是'$ {b}'。 –

回答

0

在函數結束時,添加return p;
你的功能沒有返回任何東西,這就是爲什麼undefined寫在屏幕上。

function chk(d,e) 
{ 

var x = d.split('/') 
var y = e.split('/') 
var a = new Date(x[2],x[0],x[1]) 
var b = new Date(y[2],y[0],y[1]) 
var c = (b - a) 
var p= c/(1000 * 60 * 60 * 24); 
return p; 
} 
-1

簡單地調用文檔準備寫這篇

var myVar=chk('$b','$c'); 

因爲JSP剛剛寫入scriptdocument。尚未執行。

+0

我還是不明白調用'chk'方法時''b''會不會是'$ b'純文本? –

+0

@LuiggiMendoza可能是'$ {b}'。 –

+0

這就是我的想法,但不確定它是OP的錯誤還是部分問題(因此不提供答案)。如果OP回答我在評論中提出的問題,我會敢於考慮答案。 –

1

這個問題很難回答。首先,看起來您希望使用EL將scriptlet中聲明的變量傳遞給JavaScript。要做到這一點,你應該:

  • 坐落在小腳本爲的pageContext屬性或請求屬性變量按如下說明:How to evaluate a scriptlet variable in EL?
  • 使用JSTL <c:out>從EL變量發送到您的JavaScript函數。
  • 按照GauravSharma的回答建議,在JavaScript函數的末尾添加一個return p;

您的代碼應該是這樣的(至少當我在導航使用Tomcat 7和打印2):

<script type="text/javascript"> 
    function chk(d, e) { 
     var x = d.split('/'); 
     var y = e.split('/'); 
     var a = new Date(x[0], x[1] - 1, x[2]); 
     var b = new Date(y[0], y[1] - 1, y[2]); 
     var c = (b - a); 
     var p = c/(1000 * 60 * 60 * 24); 
     return p; 
    } 
</script> 
<% 
    String b = "2013/07/12"; 
    String c = "2013/07/14"; 
    pageContext.setAttribute("b", b); 
    pageContext.setAttribute("c", c); 
%> 

<script> 
    var myVar = chk('<c:out value="${b}" />', '<c:out value="${c}" />'); 
</script> 

<body> 
    <% 
     String st = "<script>document.writeln(myVar)</script>"; 
     out.println("value=" + st); 
    %> 
</body> 

正如我對你的問題的評論說,這看起來像一個運動用於練習關於scriptlet,EL,JSTL和JavaScript的集成。 這種代碼不適用於NEVER的現場製作系統。自從很久以來,Scriptlets的使用就不受歡迎。參考:How to avoid Java code in JSP files?。另外,請向您的老師,教授或任何教您關於Java Web開發的人士展示這一點。

+0

那麼你能告訴我一個更好的方式來執行上述相同的任務嗎? – Akira

相關問題