2010-02-09 59 views
1

我嘗試做這樣的事情 動態生成JavaScript與JSP在IE

<head><% out.println("<script type=\"text/javascript\">"); out.println("function myfunction(){"); out.println("for(int i=0;i<10;i++){"); out.println("alert(message+i);"); out.println("}}"); out.println("</script></head>"); %> 

,並使用它像

<body><input type="button" value="abcd" onclick="myfunction();"/></body> 

這就是我的生成JSP頁面中的JavaScript。它工作正常,但只在鉻,而不是在IE.I然後嘗試這2.

<head><%StringBuffer dynamicJavaScript = new StringBuffer();dynamicJavaScript.append("\n<script type=\"text/javascript\">");dynamicJavaScript.append("\n</script>");%></head> 

和標籤

<%=dynamicJavaScript%> 

內再次使用它一樣,在只有一個奇怪的方式,如果我有這些解決方案(1 。 & 2.)它在IE中工作。 有同感嗎? 謝謝

回答

2
function my function(){ 

這兩種方式語法無效:1)my是錯在這裏。 2)function是保留關鍵字。

關於動態生成Javascript代碼,我強烈建議你使用小腳本這一點,但只是標記庫/ EL。你的第一行可以與JSTL幫助下完全取代(剛落,在/WEB-INF/libjstl-1.2.jarc:forEach

<head> 
    <script type="text/javascript"> 
     function myFunction() { 
      // <c:forEach begin="0" end="10" var="i"> 
       alert(message${i}); 
      // </c:forEach> 
     } 
    </script> 
</head> 

好多可讀的,不是嗎?

更新根據評論,你也可以迭代與c:forEach。通過更換特定部分:

  <c:forEach items="${bean.vector}" var="item"> 
       alert('${item}'); 
      </c:forEach> 

..where ${bean}是你的bean它被放置在任何pagerequestsessionapplication範圍和${bean.vector}需要具有在Bean類像一個同名的吸氣劑

public class Bean { 
    public Vector<String> getVector() { 
     return this.vector; 
    } 
} 

要了解有關JSTL的更多信息,請參閱Sun Java EE tutorial part II chapter 7。要了解有關EL的更多信息,請諮詢Java EE tutorial part II chapter 5

這就是說,Vector被認爲是傳統,你應該使用改進ArrayList而不是它已經取代了它在十年前(更多關於集合框架中this Sun tutorial)。在這一行中,我還建議將所有那些年齡> 10歲的教程/書籍扔掉,並閱讀最近的教程。

+0

我必須說我對EL不太好。我想先從一個bean獲得一個Vector,然後用一個for循環生成一個javascript,以顯示Vector的元素。問題是我不知道如何用EL得到這個矢量。像這樣的東西... 矢量 myVector = mybean.getMyVector();對於(int i = 1; i 2010-02-09 16:32:03

+0

我編程它完全按照你的建議,但我仍然有最初的問題。鉻所有工作正常,但在IE中我得到一個錯誤「對象預期」,這意味着IE瀏覽器無法看到myFunction()。 – 2010-02-10 09:07:08

+0

您需要根據**生成的HTML輸出**發佈SSCCE(http://sscce.org)**(這裏的JSP代碼無關緊要)。 – BalusC 2010-02-10 11:47:14