【问题标题】:How to call javascript function from javascript如何从 javascript 调用 javascript 函数
【发布时间】:2015-03-05 09:59:45
【问题描述】:

我被困在我的代码中间,需要帮助。 我正在使用 jsp 创建一个 Web 应用程序。这是我的代码:

<%@include file="dbconnection.jsp"%>

<HTML>
<HEAD>
    <TITLE></TITLE>
</HEAD>
<BODY>
    <H1></H1>
    <script language="JavaScript">
 function showdata(ctr) {
 switch (ctr) {
case 1:
    <%ResultSet rs = statement.executeQuery("select value from Authors;") ;  %>
    <% 
    int c=0;
     while(rs.next()){ 
        String result=rs.getString(1);
        c++;
    %>
    document.write('<table><tr><td>');
    document.write('<A HREF = "#" ONCLICK="Nextdata(<%=c%>)"><%=result%></A>');
    document.write('</td></tr></table>');
    <% } %>
    document.write('<INPUT TYPE="button" VALUE="Back" onClick="history.go(-1);">');
    break;
case 2:
    alert("xyz");
     break;
     }
}
function Nextdata(count)
{
 switch (count) {
    case 1:
         alert("Hi");
        break;
 }
}
</script>
 <TABLE>
           <%ResultSet resultset = statement.executeQuery("select title from Books;") ;%>
            <% 
            int counter=0;
             while(resultset.next()){ 
                String result=resultset.getString(1);
                counter++;
            %>
            <TR>
               <TD>
                   <a href="javascript:showdata(<%=counter%>)"><%=result%></a>
               </TD> 
            </TR>
            <% } %>
  </TABLE>
</BODY>
</HTML>

当我点击一个特定的链接时,showdata 函数会被调用,然后我点击另一个链接,该链接的代码写在showdata() 中以调用Nextdata() 函数。但是这个Nextdata 函数没有被调用,为什么会这样呢?我的错误在哪里?请帮忙。

【问题讨论】:

  • 你已经尝试过执行纯生成的html代码了吗?错误控制台中是否出现任何错误?
  • 没有错误...当我运行我的代码时,我得到多个链接,一个在另一个之下..当我点击一个特定链接时,我得到另一组链接,然后当我点击这些链接那里我应该得到警报框,但我没有得到它
  • @Dimple 请使用您生成的 html 和 javascript 代码创建一个 jsfiddle
  • 检查您的浏览器控制台是否出现任何错误?
  • 怎么做的不知道有没有相关的链接?

标签: javascript jsp


【解决方案1】:

你不能嵌套 javascript 函数,除非你确定嵌套函数 'NextData()' 不会在 'ShowData()' 函数。

试着把'NextData()'放到'ShowData()'的范围之外

这可能对你有用..!!

【讨论】:

  • 我确实把 Nextdata() 放在了 showdata() 的范围之外,但还是一样
  • showdata() 被 displaydata() 取代,所以不要因为不便而感到困惑
【解决方案2】:

您定义的函数名称是 Nextdata() 并且您生成的 HTML 正在调用函数 NextData()

检查这是错误吗?

在您的浏览器控制台中检查您是否收到“Uncaught ReferenceError: NextData is not defined”

【讨论】:

  • 在你回答之前,我检查并纠正了它,但还是一样
  • 好吧.. 如前所述,除非我们查看完整的 html 源代码,否则很难猜出到底哪里出了问题。. 您可以查看源代码并全选并粘贴到这里吗?浏览器中的整个源代码。
  • 我之前只选择了所有
【解决方案3】:

当我运行 jsp 时,我的来源是:

<HTML>
<HEAD>
    <TITLE>
    </TITLE>

</HEAD>

<BODY>
    <H1></H1>
    <script language="JavaScript">
function NextData(ctrr)

{
 switch (ctrr) {
    case 1:
         alert("function 3");
        break;
    case 2:
         alert("function 3");
        break;
    case 3:
        alert("function 3");
         break;
     case 4:
         alert("function 4");
          break;
     case 5:
         alert("function 5");
          break;
 }
}

</script>
    <script language="JavaScript">


function displayData(ctr) {



 switch (ctr) {
case 1:



    document.write('<table><tr><td>');
    document.write('<A HREF ="javascript:NextData(1)">Spotlight</A>');
    document.write('</td></tr></table>');

    document.write('<table><tr><td>');
    document.write('<A HREF ="javascript:NextData(2)">Oryx highlights</A>');
    document.write('</td></tr></table>');

    document.write('<table><tr><td>');
    document.write('<A HREF ="javascript:NextData(3)">Little Taster</A>');
    document.write('</td></tr></table>');

    document.write('<INPUT TYPE="button" VALUE="Back" onClick="history.go(-1);">');



    break;
case 2:


    document.write('<table><tr><td>');
    document.write('<a href="JavaScript:NextData(1)">Spotlight</a>');
    document.write('</td></tr></table>');

    document.write('<table><tr><td>');
    document.write('<a href="JavaScript:NextData(2)">Simply the Best</a>');
    document.write('</td></tr></table>');

    document.write('<table><tr><td>');
    document.write('<a href="JavaScript:NextData(3)">Juke box</a>');
    document.write('</td></tr></table>');

    document.write('<table><tr><td>');
    document.write('<a href="JavaScript:NextData(4)">100 Greatest Album/Single</a>');
    document.write('</td></tr></table>');

    document.write('<table><tr><td>');
    document.write('<a href="JavaScript:NextData(5)">List All Artists</a>');
    document.write('</td></tr></table>');

    document.write('<table><tr><td>');
    document.write('<a href="JavaScript:NextData(6)">List All Albums</a>');
    document.write('</td></tr></table>');

    document.write('<table><tr><td>');
    document.write('<a href="JavaScript:NextData(7)">Arabic</a>');
    document.write('</td></tr></table>');

    document.write('<table><tr><td>');
    document.write('<a href="JavaScript:NextData(8)">Hindi</a>');
    document.write('</td></tr></table>');

    document.write('<table><tr><td>');
    document.write('<a href="JavaScript:NextData(9)">Pop</a>');
    document.write('</td></tr></table>');

    document.write('<table><tr><td>');
    document.write('<a href="JavaScript:NextData(10)">Rock</a>');
    document.write('</td></tr></table>');

    document.write('<table><tr><td>');
    document.write('<a href="JavaScript:NextData(11)">Jazz & Blues</a>');
    document.write('</td></tr></table>');

    document.write('<table><tr><td>');
    document.write('<a href="JavaScript:NextData(12)">Country</a>');
    document.write('</td></tr></table>');

    document.write('<table><tr><td>');
    document.write('<a href="JavaScript:NextData(13)">Classical</a>');
    document.write('</td></tr></table>');

    document.write('<table><tr><td>');
    document.write('<a href="JavaScript:NextData(14)">Dance</a>');
    document.write('</td></tr></table>');

    document.write('<table><tr><td>');
    document.write('<a href="JavaScript:NextData(15)">Easy Listening</a>');
    document.write('</td></tr></table>');

    document.write('<table><tr><td>');
    document.write('<a href="JavaScript:NextData(16)">World Music</a>');
    document.write('</td></tr></table>');

    document.write('<table><tr><td>');
    document.write('<a href="JavaScript:NextData(17)">Relaxation</a>');
    document.write('</td></tr></table>');

    document.write('<table><tr><td>');
    document.write('<a href="JavaScript:NextData(18)">Malayalam</a>');
    document.write('</td></tr></table>');

    document.write('<table><tr><td>');
    document.write('<a href="JavaScript:NextData(19)">Tamil</a>');
    document.write('</td></tr></table>');

    document.write('<table><tr><td>');
    document.write('<a href="JavaScript:NextData(20)">Far East</a>');
    document.write('</td></tr></table>');

    document.write('<table><tr><td>');
    document.write('<a href="JavaScript:NextData(21)">Oryx Radio</a>');
    document.write('</td></tr></table>');

    document.write('<table><tr><td>');
    document.write('<a href="JavaScript:NextData(22)">Audio Book</a>');
    document.write('</td></tr></table>');

    document.write('<INPUT TYPE="button" VALUE="Back" onClick="history.go(-1);">');
     break;
case 3:
   alert("function 3");
    break;
case 4:
    alert("function 4");
     break;
case 5:
    alert("function 5");
     break;
case 6:
    alert("function 6");
     break;
case 7:
    alert("function 7");
     break;
case 8:
    alert("function 8");
     break;
case 9:
    alert("function 9");
     break;
case 10:
    alert("function 10");
     break;
     }

}


</script>


 <TABLE>


            <TR>
               <TD>
                   <a href="javascript:displayData(1)">Broadcast Video</a>
               </TD> 
            </TR>

            <TR>
               <TD>
                   <a href="javascript:displayData(2)">Interactive Audio</a>
               </TD> 
            </TR>

            <TR>
               <TD>
                   <a href="javascript:displayData(3)">Interactive Movies</a>
               </TD> 
            </TR>

            <TR>
               <TD>
                   <a href="javascript:displayData(4)">Trailers</a>
               </TD> 
            </TR>

            <TR>
               <TD>
                   <a href="javascript:displayData(5)">Interactive Trailers</a>
               </TD> 
            </TR>

            <TR>
               <TD>
                   <a href="javascript:displayData(6)">Interactive Shorts</a>
               </TD> 
            </TR>

            <TR>
               <TD>
                   <a href="javascript:displayData(7)">PA</a>
               </TD> 
            </TR>

            <TR>
               <TD>
                   <a href="javascript:displayData(8)">Young Travellers</a>
               </TD> 
            </TR>

            <TR>
               <TD>
                   <a href="javascript:displayData(9)">MISC</a>
               </TD> 
            </TR>

            <TR>
               <TD>
                   <a href="javascript:displayData(10)">Games</a>
               </TD> 
            </TR>


  </TABLE>
</BODY>
</HTML>

点击链接后,我将其作为来源:

<table><tr><td><a href="javascript:NextData(1)">Spotlight</a></td></tr></table><table><tr><td><a href="javascript:NextData(2)">Simply the Best</a></td></tr></table><table><tr><td><a href="javascript:NextData(3)">Juke box</a></td></tr></table><table><tr><td><a href="javascript:NextData(4)">100 Greatest Album/Single</a></td></tr></table><table><tr><td><a href="javascript:NextData(5)">List All Artists</a></td></tr></table><table><tr><td><a href="javascript:NextData(6)">List All Albums</a></td></tr></table><table><tr><td><a href="javascript:NextData(7)">Arabic</a></td></tr></table><table><tr><td><a href="javascript:NextData(8)">Hindi</a></td></tr></table><table><tr><td><a href="javascript:NextData(9)">Pop</a></td></tr></table><table><tr><td><a href="javascript:NextData(10)">Rock</a></td></tr></table><table><tr><td><a href="javascript:NextData(11)">Jazz & Blues</a></td></tr></table><table><tr><td><a href="javascript:NextData(12)">Country</a></td></tr></table><table><tr><td><a href="javascript:NextData(13)">Classical</a></td></tr></table><table><tr><td><a href="javascript:NextData(14)">Dance</a></td></tr></table><table><tr><td><a href="javascript:NextData(15)">Easy Listening</a></td></tr></table><table><tr><td><a href="javascript:NextData(16)">World Music</a></td></tr></table><table><tr><td><a href="javascript:NextData(17)">Relaxation</a></td></tr></table><table><tr><td><a href="javascript:NextData(18)">Malayalam</a></td></tr></table><table><tr><td><a href="javascript:NextData(19)">Tamil</a></td></tr></table><table><tr><td><a href="javascript:NextData(20)">Far East</a></td></tr></table><table><tr><td><a href="javascript:NextData(21)">Oryx Radio</a></td></tr></table><table><tr><td><a href="javascript:NextData(22)">Audio Book</a></td></tr></table><INPUT TYPE="button" VALUE="Back" onClick="history.go(-1);">

【讨论】:

  • 代码显然没有任何问题。您使用的是哪个浏览器?如果您使用的是 chrome,但没有收到警报,请尝试将 alert() 替换为 console.log() .. 可能您已在 chrome 中将选项设置为“不显示此页面的警报”。检查您的 console.log 是否进入浏览器控制台...
  • m 使用 firefox,如果您查看了我的第一页源代码,那么警报正在工作!
  • 我可以看一下,我认为-在我看来-您的概念存在普遍问题,并且还认为 Internet Explorer 将显示与 Firefox 相同的效果。 stackoverflow.com/questions/28854771/… 显示了另一种情况,其中提到了类似(注意:类似不一样)的问题。你到底想做什么?
  • 我想使用链接显示数据的层次结构,即当我点击一个链接时,我应该看到其中的数据,然后当我点击特定链接时,我应该看到另一个数据,依此类推
【解决方案4】:

我花时间调查了这个问题并发现了——在这种情况下,多亏了 Internet Explorer——原因。它也证实了我在回答二中的评论(来自 op 本人):

当您执行document.write() 时,IE 和FF 会生成一个新的空白页。效果是javascript函数NextData()不存在。真的确定两个浏览器都会创建一个新页面吗?是的,因为history.goBack(-1) 确实有效并再次显示第一个视图。 所以浏览器无法执行不存在的功能。

任何解决方案?:也许......

一种 解决此问题的方法是创建两个 div 元素,其中包含第一个表,第二个包含 附加 目标表。隐藏第一个并显示第二个。 Javascript: AppendChild 会帮助你理解我的意思。

P.S.:解决这个问题的方法不止一种,但永远不要使用document.write()。如您所见,此方法在某些浏览器中显示了意外行为。

【讨论】:

    猜你喜欢
    • 2019-01-07
    • 2018-08-15
    • 2012-07-04
    • 2014-03-23
    • 2013-08-28
    • 2019-10-24
    • 2010-11-05
    • 2014-05-31
    • 1970-01-01
    相关资源
    最近更新 更多