调用jquery函数时出现问题

时间:2011-06-06 12:17:19

标签: javascript jquery asp.net xml menu

我有以下jQuery函数,我试图通过发送OnMenuClick作为参数来调用MenuId函数,但我的OnMenuClick事件未提供所需的输出,是他们的任何替代方法来实现这一目标?

function CreateMenus(results) {
 for (var i = 0; i < results.length; i++) {
  $("<div class='Menu'>" + results[i].Text + "</div>")
     .click({ MenuId: results[i].MenuId }, OnMenuClick)
     .appendTo("#accordionContainer");
 }
}

这是我的OnMenuClick功能

function OnMenuClick(event)
     {
    $("div[id ^= 'menuItemGroup']").slideUp(500);
    $.ajax(
        {
            type: "POST",
            url: "MenuItems.asmx/GetMenuItems",
            data: '{"menuId":"' + event.data.MenuId + '"}',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(items) {
                $(event.target).children().remove();
                var html = "<div id='menuItemGroup" + event.data.MenuId + "' style='display:none'>";
                for (var j = 0; j < items.length; j++) {
                    html += "<div class='MenuItem'> <a href='" + items[j].NavigateUrl + "'>"  + 
                    items[j].Text + "</a></div>";
                }
                html += "</div>";
                $(event.target).append(html);
                $("#menuItemGroup" + event.data.MenuId).slideDown(500);
            },
            error: function(err) {
                alert(err.status + " - " + err.statusText);
            }
        }
    )
}   

如果将MenuId1传递给OnClick

,这将是我的示例XML输出
  <?xml version="1.0" encoding="utf-8" ?> 
  <ArrayOfMenuItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">
    <MenuItem>
      <MenuId>1</MenuId> 
      <MenuItemId>1</MenuItemId> 
      <Text>Books</Text> 
      <NavigateUrl>google.com</NavigateUrl> 
    </MenuItem>
    <MenuItem>
      <MenuId>1</MenuId> 
      <MenuItemId>2</MenuItemId> 
      <Text>Cd</Text> 
      <NavigateUrl>yahoo.com</NavigateUrl> 
    </MenuItem>
  </ArrayOfMenuItem>

1 个答案:

答案 0 :(得分:1)

它可能不是解决方案,但您可以尝试

首先将div附加到容器,然后执行绑定

function CreateMenus(results) {
 for (var i = 0; i < results.length; i++) {
  $("<div class='Menu'>" + results[i].Text + "</div>")         
     .appendTo("#accordionContainer")
     .click({ MenuId: results[i].MenuId }, OnMenuClick);
 }
}

... HTH