【问题标题】:Call javascript function in for loop code-behind在 for 循环代码隐藏中调用 javascript 函数
【发布时间】:2016-09-15 16:22:55
【问题描述】:

我有一个 js 函数,可以像这样动态创建导航标签:

    function newTab(i) {

         for (var x = 0; x<i; x++ ){
             var nextTab = $('#tabs li').size() + 1;

             // create the tab
             $('<li><a href="#tab' + nextTab + '" data-toggle="tab">Tab ' + nextTab + '</a></li>').appendTo('#tabs');

             // create the tab content
             $('<div class="tab-pane" id="tab' + nextTab + '">tab' + nextTab + ' content</div>').appendTo('.tab-content');
         }
     };

我从后面的代码中发送i 参数

 Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
    Dim dtAreas As New DataTable
    Dim i As Integer 

    dtAreas = EvaRH.GetAreas
    i = dtAreas.Rows.Count - 1

    ClientScript.RegisterStartupScript(Page.GetType(), "Tab1", "newTab('" & i & "')", True)

End Sub

这工作正常,但是我想将选项卡名称设置为我在区域数据集上拥有的名称,所以首先我将我的 JS 函数更改为:

function newTab() {

         var nextTab = $('#tabs li').size() + 1;

         // create the tab
         $('<li><a href="#tab' + nextTab + '" data-toggle="tab">Tab ' + nextTab + '</a></li>').appendTo('#tabs');

         // create the tab content
         $('<div class="tab-pane" id="tab' + nextTab + '">tab' + nextTab + ' content</div>').appendTo('.tab-content');
 };

并尝试从后面的代码中在for loop 上创建多次调用此函数的选项卡:

    For i = 0 To dtAreas.Rows.Count - 1
        ClientScript.RegisterStartupScript(Me.GetType(), "tab" & i.ToString, "newrTab()", True)
    Next

但它不起作用,不会给我任何错误,也不会创建任何选项卡。 我试过设置js键值静态,但是没用,也试过这两个:

Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "tab" & i.ToString, "newTab()", True)
ScriptManager.RegisterStartupScript(Page, Me.GetType(), "tab" & i.ToString, "newTab()", True)

我也尝试用+ 替换&amp;,但没有成功

【问题讨论】:

  • 您的 newTab 期望参数 i 未发送,因此它具有 undefined 值。
  • @AlexKudryashev 这是第二个函数的类型......对不起

标签: javascript jquery asp.net vb.net


【解决方案1】:

客户端脚本和服务器代码不能以这种方式混合。 Javascript 仅在浏览器上运行,它与后端脚本通信的唯一方式是通过 AJAX(或其他网络)调用。

相反,让您的服务器为带有名称的选项卡以及带有各自内容的选项卡窗格呈现 HTML,然后让您的脚本找到这些选项卡(基于 data 属性)并将它们转换为动态导航。这对 SEO 来说会更好,因为即使禁用了 javascript,您的网站内容仍然可见。

【讨论】:

  • 所以基本上用js不可能吗?我知道我可以在 HTML 上创建选项卡,但希望根据当前存在的区域数量动态创建它们,因此如果将来添加或删除区域,它将创建/删除该标签,而无需在 HTML 上更改它,希望我说清楚..
  • 您在服务器上拥有该信息,因此您可以创建更多或更少的面板,然后只需将您的脚本包装起来,无论创建多少。有很多 jquery 插件可以使包装一堆 div 并将它们转换为选项卡非常简单。类似$('.panels').tabs()
  • 我想我理解你...大声笑,我对这一切都很陌生,会调查一下谢谢!
  • 这个想法是让你的服务器,连同所有的信息,呈现出静态的 html,然后让 JQuery 通过包装它并使其动态化来逐步增强它。同样,首先寻找一些 jquery 插件,因为存在很多可以完全满足您需求的插件。然后,只需要满足服务器的 HTML 格式即可。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-13
  • 2012-03-11
相关资源
最近更新 更多