我在SOF上看了大约5个问题,并没有真正找到有用的答案。我如何从我的.ascx控件中的客户端事件调用我的javascript函数?这是我的.ascx文件..大多数答案引导我:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="UIMenu.ascx.cs" Inherits="controls_UIMenu" %>
<script language="javascript" type="text/javascript">
function insetItem(myMenu)
{
myMenu.setAttribute("class", "myClass");
}
</script>
<asp:Menu ID="Menu1" runat="server" Font-Bold="True" Font-Size="Large" Height="50px"
Orientation="Horizontal" Target="_self" StaticMenuItemStyle-HorizontalPadding="10px"
OnMenuItemClick="insetItem(this)" StaticMenuItemStyle-BorderStyle="outset">
<Items>
<asp:MenuItem NavigateUrl="~/Home.aspx" Target="_self" Text="Home" Value="Home"></asp:MenuItem>
<asp:MenuItem NavigateUrl="~/Loaner.aspx" Target="_self" Text="New" Value="New"></asp:MenuItem>
</Items>
</asp:Menu>
我这样做的时候会遇到不同的错误。 “..... ascx不包含”insetItem“的定义,而我使用此文件的其他页面不再识别它。当我尝试将js放在将要使用它的实际.aspx页面上时,我得到相同的无定义错误。
我刚开始学习jscript,还是很漂亮的菜鸟。我试图这样做,当用户点击菜单项时,我希望该项的bordertyle更改为“inset”。我不确定如何更改javascript&gt; _&lt;中所点击的特定项目的属性但这是另一个问题。如果有人能以正确的方式引导我这样做,那就太棒了。谢谢!
答案 0 :(得分:2)
错误来自“OnMenuItemClick”,它是服务器端的事件处理程序。它没有在服务器端找到'insetItem',因此抛出错误。
如果您希望在单击菜单项时执行操作,则可以将onclick="insetitem(this);return false;"
放入MenuItem
标记
<asp:MenuItem onclick="insetitem(this);returnfalse;" NavigateUrl="~/Loaner.aspx" Target="_self" Text="New" Value="New"></asp:MenuItem>
return false;
将阻止页面在单击菜单项时进行回发。
我没有设置任何东西来测试它,它完全不在头顶,所以你可能需要稍微调整它才能使它工作。 :)
答案 1 :(得分:1)
MenuItemClick
实际上是一个MenuEventHandler
c#事件处理程序。我相信您会寻找某种OnClientClick
,或只是使用onclick
属性。
此外,我不知道您是否正在使用任何库,但jQuery
,Prototype
或其他库使得在文档加载时可以非常轻松地绑定此事件侦听器。
答案 2 :(得分:0)
OnMenuItemClick是一个服务器端事件 - 不是用javascript在客户端捕获的事件。
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.menu.menuitemclick(v=vs.80).aspx