在没有任何事件的情况下调用Javascript函数

时间:2013-07-12 15:55:30

标签: java javascript jsp

这是用a.jsp编写的代码:

    <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>

我想得到这两个日期(即'b'和'c')之间的天数(即'p')作为输出。但我得到的输出是“值= NaN”。这段代码有什么问题?请帮忙。

3 个答案:

答案 0 :(得分:1)

回答这个问题很棘手。首先,看起来您希望使用EL将在scriptlet中声明的变量传递给JavaScript。要做到这一点,你应该:

  • 将scriptlet中的变量设置为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>

正如我在你的问题评论中所说,这看起来像是练习scriptlets,EL,JSTL和JavaScript集成的练习。 此类代码不适用于现场制作系统。长时间以来不鼓励使用Scriptlet。请参阅:How to avoid Java code in JSP files?。此外,向您的老师,教授或任何教您Java Web开发的人展示。

答案 1 :(得分: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;
}

答案 2 :(得分:-1)

只需打电话给这个

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

准备好文件。

因为JSP刚刚将script写入document。尚未执行。