【问题标题】:onClientClick calling Javascript Function, can't pass parameteronClientClick 调用 Javascript 函数,无法传递参数
【发布时间】:2013-08-15 14:58:37
【问题描述】:

我目前正在开发一个使用 ASP.NET 中的 Ajax Tabs 控件的项目。我的这个项目的语言是 VB.NET。我正在尝试利用选项卡上的“OnClientClick”事件。我正在使用数据库中的数据填充选项卡,并且我正在使用 VB 函数来实际创建选项卡。 VB代码如下:

Protected Sub makeTab(ByVal categoryName As String, ByVal categoryId As String)

            Dim label As New Label
            label.Text = categoryName
            Dim tab As New AjaxControlToolkit.TabPanel
            tab.Controls.Add(label)
            tab.HeaderText = categoryName
            tab.OnClientClick = "display_alert(" + categoryId + ")"

            tcResultSet.Tabs.Add(tab)
            'Next
            For x As Integer = 1 To tcResultSet.Tabs.Count
                If tcResultSet.Tabs(tcResultSet.Tabs.Count - x).HeaderText = "Tab0" Then tcResultSet.Tabs.RemoveAt(tcResultSet.Tabs.Count - x)
            Next


        End Sub

数据库返回的每条记录都会调用此函数。

在ASPX页面中,tab容器为:

<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server" EnablePartialRendering="true" />
                            <asp:TabContainer ID="tcResultSet" runat="server" AutoPostBack="true" ScrollBars="auto" >
                                <asp:TabPanel ID="tbTab0" runat="server" HeaderText="Tab0" />
                            </asp:TabContainer>

我的javascript函数是:

<script type="text/javascript" >
    function display_alert(categoryNumber) {
        window.alert("Hello! You clicked a tab");
    }
</script>

它被放置在我的页面顶部的页面头部内。如您所见,我目前什至没有在我的 Javascript 函数中使用我的变量,但我会的。目前,此代码不起作用。如果我从 Javascript 函数定义中删除变量,并且如果我调用我的 Javascript 函数(来自我的 VB),如“display_alert”,它会起作用。如果我在函数名后包含“()”,它将不起作用。有没有办法解决?有什么方法可以让它正常工作吗?

【问题讨论】:

  • 所以如果你使用tab.OnClientClick = "display_alert()",那行不通?另外,我建议您不要使用OnClientClick 来设置内联事件处理程序,而是使用 JavaScript 不显眼地绑定它们;你可以给你的元素一个特定的class 属性并以这种方式找到它们。这可以在 DOM 准备好的事件中完成(例如 window.onload),您可以通过在 VB 中设置 data-* 属性来访问 categoryId
  • 是的,使用 tab.OnClientClick = "display_alert()" 不起作用。
  • 好吧,如果点击了 Tab #1,那么我需要在我的 Javascript 函数中知道点击了 Tab #1,而不是 Tab #2 或其他任何东西。如果我使用Javascript绑定方法调用,我可以知道吗?

标签: javascript ajax vb.net panels onclientclick


【解决方案1】:

我认为该应用程序的客户规范需要 AJAX 选项卡,在与他们交谈后,他们对其他选项持开放态度。现在,我正在动态创建 HTML 按钮,并且能够毫无问题地以这种方式调用我的 Javascript。问题已解决。

【讨论】:

    【解决方案2】:

    附加到 OnClientClick 的事件处理程序不能有参数。为了使其正常工作,您需要将代码包装在一个函数中,例如在 Javascript 中是

    tab.OnClientClick = function () {alert('my message here');}
    

    这也适用于标记,类似于

    <asp:TabPanel ID="myTab" runat="server" OnClientClick="function (){alert('this works');}">
    

    认为这与事件处理程序的签名有关。当分配给OnClientClick 时,您的事件处理程序将被标记到“在引擎盖下”已经存在的事件处理程序 - 如果它们没有相同的签名,您将收到运行时错误。

    【讨论】:

      猜你喜欢
      • 2012-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-28
      • 2011-10-05
      • 1970-01-01
      相关资源
      最近更新 更多