0

次のような動的に生成されたメニュー(C#)があります。

MenuItem(string text, string value, string imageUrl, string navigateUrl, string target)

MenuItem AdminLevel1 = new MenuItem("Admin", "Admin");
MenuItem AdminPedidosRegisto = new MenuItem("Questions", "AdminQ");

NavigationMenu.Items.Add(new MenuItem("Messages Received", "AdminMessagesR", "", "./Admin/Messages.ascx", "ContainerIframe"));

AdminPedidosRegisto.ChildItems.Add(new MenuItem("Pending", "AdminPending", "", "./Admin/Pedidos.ascx", "ContainerIframe"));`

ここContainerIframeで、はiframeのIDでNavigationMenuあり、は(asp:Menu)のIDです。

MenuItemをクリックしたときに実行されるJavaScriptを設定したい。

方法はありますか?

4

4 に答える 4

1

.aspxページのheadタグ内に次のコードを入れてみてください。

   <script type="text/javascript"> window.onload = function(){

    var menuTable = document.getElementById("<%=Menu1.ClientID%>");  //specify your menu id instead of Menu1 var menuLinks = menuTable.getElementsByTagName("a");
        for(i=0;i<menuLinks.length;i++)
        {
            menuLinks[i].onclick = function(){return confirm("u sure to postback?");}
        }
        setOnClickForNextLevelMenuItems(menuTable.nextSibling); } function setOnClickForNextLevelMenuItems(currentMenuItemsContainer){

        var id = currentMenuItemsContainer.id;
        var len = id.length;
        if(id != null && typeof(id) != "undefined" && id.substring(0,4) == "Menu" && id.substring(parseInt(len)-5,parseInt(len)) == "Items")
        {
            var subMenuLinks = currentMenuItemsContainer.getElementsByTagName("a");
            for(i=0;i<subMenuLinks.length;i++)
            {
                subMenuLinks[i].onclick = function(){return confirm("u sure to postback?");}
            }
            setOnClickForNextLevelMenuItems(currentMenuItemsContainer.nextSibling);
        } } </script>

このソリューションを機能させるために、コードビハインドファイルにコードを記述する必要がないことに注意してください。IE7とFF2.0でコードをテストしました

それがあなたのために働くことを願っています。

乾杯!!

于 2012-12-13T12:55:55.417 に答える
0

AdminLevel1.NavigateUrl = "javascript:callSomeFunction();";

于 2012-12-13T15:12:25.343 に答える
0

@Manibhadraに感謝します(これは親アイテムと子アイテムには十分です)

window.onload = function ()
{
    var menuTable = document.getElementById("<%=NavigationMenu.ClientID%>");
    var menuLinks = menuTable.getElementsByTagName("a");
    for (i = 0; i < menuLinks.length; i++)
    {
        menuLinks[i].onclick = function () { setInnerHTML('ContainerTittle', this.innerHTML); }
    }
}
于 2012-12-14T10:46:16.387 に答える
0

ハーンの答えはすべてのアイテムを同じにするようです。

私は以下を使用します:

  1. ポストバックしないようにメニュー項目を選択不可にします
  2. 必要に応じて、次のコードを追加します。

Page.ClientScript.RegisterStartupScript(typeof(Page), "123", string.Format("$('#MenuDiv').find('a').filter(':contains(\"{0}\")').css('cursor', 'pointer').click(function(){{ {1} }});", Title, Script), true);

ここ
で、「123」はスクリプトの一意のキーです
。MenuDivはメニュークライアントIDです。
タイトルはメニュー項目に割り当てたテキストです
。スクリプトは実行するJavaScriptです。

于 2014-03-19T21:03:41.637 に答える