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

Calling a Javascript function without any event

本文关键字:情况下 调用 Javascript 函数 事件 任何      更新时间:2023-09-26

这是用.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"answers"c")之间的天数(即"p")作为输出。但我得到的输出是"value=NaN"。这个代码出了什么问题?请帮忙。

这个问题很难回答。首先,看起来您想要使用EL将scriptlet中声明的变量传递给JavaScript

  • 将scriptlet中的变量设置为pageContext属性或request属性,如下所述:如何评估EL中的scriptlet变量
  • 使用JSTL <c:out>将变量从EL发送到JavaScript函数
  • 按照GauravSharma的回答建议,在JavaScript函数的末尾添加一个return p;

您的代码应该是这样的(至少对我使用Tomcat7和在导航器中打印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集成的练习此类代码不适用于实时生产系统NEVER。长期以来,不鼓励使用Scriptlet。请参阅:如何避免JSP文件中的Java代码?。同时,将此展示给您的老师、教授或教您Java web开发的任何人。

在函数末尾添加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;
}

只需调用write this

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

已准备好文档。

因为JSP刚刚写入了scriptdocument。还没有执行。