0

MySql データベースから入力された動的メニューがあります。このメニューの項目の 1 つがクリックされると、Ajax リクエストが作成され、それに応じて、Ajax リクエストに渡された ID に基づいてツリー構造 (それぞれのサブカテゴリを含む製品カテゴリ) が強調表示されます。

メニューは単純に維持され<ul><li></li></ul>、マウス ボタンがメニュー上の項目の 1 つに置かれると、子項目をポップアップ (ドロップダウン) するためにいくつかの jQuery 関数が呼び出されます。うまくいく。

何らかの理由で、同じタイプのメニューを同じページに表示する必要があります (これらのメニューの 1 つだけが Ajax を使用しています。残りは Ajax を使用する必要はありません)。

問題は、jQuery 関数を読み込んでメニュー項目を個別にポップアップする必要があることです。ページの読み込みで 1 回、Ajax リクエストでもう一度。それ以外の場合、メニューはポップアップしません。その結果、ブラウザで 2 つの JavaScript がアクティブになり、同じページの残りのメニューが正しく表示されないように思われます。

マウスボタンがホバーされている場合に注意してください。Ajax 要求が行われない場合 (上記の Ajax 呼び出しを使用する唯一のメニューを介して)、すべてのメニューが適切に表示されます。

私の言いたいことを理解していただけると幸いです。申し訳ありませんが、質問をこれ以上明確にすることはできません。なぜこれが起こるのですか?これに対する解決策はありますか。

編集:

メニューをポップアップするために使用されるこのjQueryコードがあります。

var arrowimages_new={down:['downarrowclass', 'category_parent_css_js/images/down.gif', 3], right:['rightarrowclass', 'category_parent_css_js/images/right.gif']}

var jqueryslidemenu_new={

    animateduration: {over: 200, out: 100}, //duration of slide in/ out animation, in milliseconds

    buildmenu_new:function(menuid, arrowsvar){
        jQuery(document).ready(function($){
            var $mainmenu=$("#"+menuid+">ul")
            var $headers=$mainmenu.find("ul").parent()
            $headers.each(function(i){
                var $curobj=$(this)
                var $subul=$(this).find('ul:eq(0)')
                this._dimensions={w:this.offsetWidth, h:this.offsetHeight, subulw:$subul.outerWidth(), subulh:$subul.outerHeight()}
                this.istopheader=$curobj.parents("ul").length==1? true : false
                $subul.css({top:this.istopheader? this._dimensions.h+"px" : 0})
                $curobj.children("a:eq(0)").css(this.istopheader? {paddingRight: arrowsvar.down[2]} : {}).append(
                    '<img src="'+ (this.istopheader? arrowsvar.down[1] : arrowsvar.right[1])
                    +'" class="' + (this.istopheader? arrowsvar.down[0] : arrowsvar.right[0])
                    + '" style="border:0;" />'
                )

                $curobj.hover(
                    function(e){
                        var $targetul=$(this).children("ul:eq(0)")
                        this._offsets={left:$(this).offset().left, top:$(this).offset().top}
                        var menuleft=this.istopheader? 0 : this._dimensions.w
                        menuleft=(this._offsets.left+menuleft+this._dimensions.subulw>$(window).width())? (this.istopheader? -this._dimensions.subulw+this._dimensions.w : -this._dimensions.w) : menuleft
                        if ($targetul.queue().length<=1) //if 1 or less queued animations
                            $targetul.css({left:menuleft+"px", width:this._dimensions.subulw+'px'}).slideDown(jqueryslidemenu.animateduration.over)
                    },
                    function(e){
                        var $targetul=$(this).children("ul:eq(0)")
                        $targetul.slideUp(jqueryslidemenu.animateduration.out)
                    }
                ) //end hover
            }) //end $headers.each()
            $mainmenu.find("ul").css({display:'none', visibility:'visible', zIndex:'99999'})
            $mainmenu.find("ul li").css({zIndex:'99999'})
        }) //end document.ready
    }
}

<script></script>ページのロード時に使用されるタグの src 属性を使用して、同じ jQuery が既にインポートされています。

これは Ajax 呼び出しを使用する関数です。

function getParentId(parentId)
{
    $.ajax({
        datatype:"html",
        type: "GET",
        url: "ajax/ParentId.php",
        data: "ed_id=" + parentId+"&t="+new Date().getTime(),
        success: function(response)
        {       
            $('#originalMenu').html(response);
            jqueryslidemenu_new.buildmenu_new("myslidemenu", arrowimages_new); 
            // The above function is called from here.              
        },
        error: function(e)
        {
            alert('Error: ' + e);
        }
    });
    document.getElementById("txt_parent").value=parentId;   
}


編集:

以下は、js を含む完全な HTML コードです (デモンストレーションのためだけに)。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test Menu</title>
<link rel="stylesheet" type="text/css" href="category_parent_css_js/cat_parent.css" />
<script src="js/jquery-1.6.min.js" type="text/javascript"></script>
<script type="text/javascript" language="javascript" src="category_parent_css_js/cat_parent_js.js"></script>
<script type="text/javascript" language="javascript">

    //This code is used to pop up menu after an Ajax request is made.
    //On page load, exactly the same code which is an external js in on of preceding script tags is used. 

    var arrowimages_new={down:['downarrowclass', 'category_parent_css_js/images/down.gif', 3], right:['rightarrowclass', 'category_parent_css_js/images/right.gif']}

    var jqueryslidemenu_new={

        animateduration: {over: 200, out: 100}, //duration of slide in/ out animation, in milliseconds

        buildmenu_new:function(menuid, arrowsvar){
            jQuery(document).ready(function($){
                var $mainmenu=$("#"+menuid+">ul")
                var $headers=$mainmenu.find("ul").parent()
                $headers.each(function(i){
                    var $curobj=$(this)
                    var $subul=$(this).find('ul:eq(0)')
                    this._dimensions={w:this.offsetWidth, h:this.offsetHeight, subulw:$subul.outerWidth(), subulh:$subul.outerHeight()}
                    this.istopheader=$curobj.parents("ul").length==1? true : false
                    $subul.css({top:this.istopheader? this._dimensions.h+"px" : 0})
                    $curobj.children("a:eq(0)").css(this.istopheader? {paddingRight: arrowsvar.down[2]} : {}).append(
                        '<img src="'+ (this.istopheader? arrowsvar.down[1] : arrowsvar.right[1])
                        +'" class="' + (this.istopheader? arrowsvar.down[0] : arrowsvar.right[0])
                        + '" style="border:0;" />'
                    )

                    $curobj.hover(
                        function(e){
                            var $targetul=$(this).children("ul:eq(0)")
                            this._offsets={left:$(this).offset().left, top:$(this).offset().top}
                            var menuleft=this.istopheader? 0 : this._dimensions.w
                            menuleft=(this._offsets.left+menuleft+this._dimensions.subulw>$(window).width())? (this.istopheader? -this._dimensions.subulw+this._dimensions.w : -this._dimensions.w) : menuleft
                            if ($targetul.queue().length<=1) //if 1 or less queued animations
                                $targetul.css({left:menuleft+"px", width:this._dimensions.subulw+'px'}).slideDown(jqueryslidemenu.animateduration.over)
                        },
                        function(e){
                            var $targetul=$(this).children("ul:eq(0)")
                            $targetul.slideUp(jqueryslidemenu.animateduration.out)
                        }                                               
                    ) //end hover
                }) //end $headers.each()
                $mainmenu.find("ul").css({display:'none', visibility:'visible', zIndex:'99999'})
                $mainmenu.find("ul li").css({zIndex:'99999'})
            }) //end document.ready
        }
    }

    //This function just sends an Ajax request.

    function getParentId(parentId)
    {
        $.ajax({
            datatype:"html",
            type: "GET",
            url: "ajax/ParentId.php",
            data: "ed_id=" + parentId+"&t="+new Date().getTime(),
            success: function(response)
            {       
                $('#originalMenu').html(response);
                jqueryslidemenu_new.buildmenu_new("myslidemenu", arrowimages_new);              
                //This calls the above function to pop up the menu.
            },
            error: function(e)
            {
                alert('Error: ' + e);
            }
        });
    }
</script>
</head>

<body>
<form action="" id="dataForm" name="dataForm" method="post">
  <table width="970" border="0" align="center" cellpadding="0" cellspacing="0">
    <tr>
      <td align="center" valign="middle" class="menu"><div id="header_top_menu">
          <div id="myslidemenu" class="jqueryslidemenu">
            <ul>
              <li>
                <div style='width:auto;cursor:hand;text-align:left; background-color:white; border:none; color:black; font-size:small;'>Menu 1</div>
                <ul>
                  <li><a href="#" onclick="getParentId(19); return false;">Menu Item 1</a>
                    <ul>
                      <li><a href="#" onclick="getParentId(21); return false;">Child Item 1</a></li>
                      <li><a href="#" onclick="getParentId(20); return false;">Child Item 2</a></li>
                      <li><a href="#" onclick="getParentId(20); return false;">Child Item 3</a></li>
                      <li><a href="#" onclick="getParentId(20); return false;">Child Item 4</a></li>
                      <li><a href="#" onclick="getParentId(20); return false;">Child Item 5</a></li>
                    </ul>
                  </li>
                </ul>
            </ul>
          </div>
        </div></td>
  </table>

  <br/><br/><br/><br/><br/>

  <table width="970" border="0" align="center" cellpadding="0" cellspacing="0">
    <tr>
      <td align="center" valign="middle" class="menu"><div id="header_top_menu">
          <div id="myslidemenu" class="jqueryslidemenu">
            <ul>
              <li>
                <div style='width:auto;cursor:hand;text-align:left; background-color:white; border:none; color:black; font-size:small;'>Menu 2</div>
                <ul>
                  <li><a href="#" onclick="getParentId(19); return false;">Menu Item 1</a>
                    <ul>
                      <li><a href="#">Child Item 1</a></li>
                      <li><a href="#">Child Item 2</a></li>
                      <li><a href="#">Child Item 3</a></li>
                      <li><a href="#">Child Item 4</a></li>
                      <li><a href="#">Child Item 5</a></li>
                    </ul>
                  </li>
                </ul>
            </ul>
          </div>
        </div></td>
  </table>
</form>
</body>
</html>

この HTML は 2 つのメニューと を表示Menu 1しますMenu 2。アイテムがMenu 1クリックされると、このデモでは何もしない URL に Ajax リクエストが送信されます。Ajax リクエストが行われる前に、両方のメニューが適切に表示されます。メニュー 1を以下に示します。

ここに画像の説明を入力

メニュー 2は次のように表示されます (メニュー 1 と同じ)。

ここに画像の説明を入力

メニュー 1は、 のアイテムMenu 1がクリックされたときに発生する Ajax リクエストを送信する役割を果たします (この場合は何もしません。この場合、この Ajax リクエストが送信されるページは完全に空白のままです。これは単なるデモンストレーションです)。

どちらの場合も、マウス ポインタを の上に置くと、 .....Menu Item 1を含むサブ メニューが開きます。Child Item 1Child Item 5

Ajax リクエストが行われた後、 にカーソルを合わせるとMenu Item 1Menu 2正しく機能せず、次のようになります

ここに画像の説明を入力

Menu Item 1オンにするとMenu 2その親メニューの最後のサブメニュー( )が一度に表示されます。なぜこれが起こるのですか?Menu Item 1

メニューをポップアップするために使用されるページ読み込み時のjsコードは、次のようにインポートされたコードに記載されています。

<script type="text/javascript" language="javascript" src="category_parent_css_js/cat_parent_js.js"></script>

これは、コード スニペットで言及されている js コードとまったく同じです。このスニペットの js コードは、Ajax リクエストが行われた後にメニューをポップアップするために使用されます。


念のため、CSSが必要な場合は、次のタグでリンクされた次のとおりです。

<link rel="stylesheet" type="text/css" href="category_parent_css_js/cat_parent.css" />

.jqueryslidemenu{font:bold 9px Tahoma, Verdana, sans-serif;color:#fff;width: 100%;text-align:left;z-index:99999}
.jqueryslidemenu ul{margin: 0;padding: 0px;list-style-type: none;z-index:99999}
.jqueryslidemenu ul li{position: relative;display: inline;float: left;z-index:auto}
.jqueryslidemenu ul li a{font:bold 12px Tahoma, Verdana, sans-serif;display: block;background:#000;color: #fff;padding: 3px 3px;text-decoration: none;z-index:99999}
* html .jqueryslidemenu ul li a{display: inline-block;z-index:99999}
.jqueryslidemenu ul li a:link, .jqueryslidemenu ul li a:visited{color: #fff;text-decoration: none;z-index:99999}   
.jqueryslidemenu ul li a:hover{background:#000;text-decoration:none;color: #03C;z-index:99999}
.jqueryslidemenu ul li ul{position: absolute;left: 0;display: block;visibility: hidden;z-index:99999}
.jqueryslidemenu ul li ul li{display: list-item;float: none;z-index:99999}
.jqueryslidemenu ul li ul li ul{top:0;z-index:99999}
.jqueryslidemenu ul li ul li a{font:bold 9px Tahoma, Verdana, Geneva, sans-serif;width: 140px;margin: 0;padding: 6px;border-top-width: 0;border-bottom: 1px solid gray;z-index:99999}
.jqueryslidemenuz ul li ul li a:hover{color:#fff; background:#000;z-index:99999}
.downarrowclass{position: absolute;top: 8px;right: 7px;display:none;z-index:99999}
.rightarrowclass{position: absolute;top: 6px;right: 5px;z-index:99999}
4

3 に答える 3

2

HTML、Javascript、および CSS コードを確認しました。IDE で強調表示されたすべてのエラーを修正し、テスト目的ですべてのコードを 1 つのファイルにまとめました。置き換えようとしていたメニューの HTML だけを返す ajax メソッドを作成しましたが、いくつかの変数の名前を変更する必要がありました。さらに、私はあなたのセットアップに実際には触れませんでした。あなたは物事を実際よりも複雑にしようとしていると思いますが、完全な状況スケッチと概念実証を作成する時間がないため、結果として次のコードを提示します。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Test Menu</title>
    <style type="text/css">
        .jqueryslidemenu
        {
            font: bold 9px Tahoma, Verdana, sans-serif;
            color: #fff;
            width: 100%;
            text-align: left;
            z-index: 99999;
        }

            .jqueryslidemenu ul
            {
                margin: 0;
                padding: 0px;
                list-style-type: none;
                z-index: 99999;
            }

                .jqueryslidemenu ul li
                {
                    position: relative;
                    display: inline;
                    float: left;
                    z-index: auto;
                }

                    .jqueryslidemenu ul li a
                    {
                        font: bold 12px Tahoma, Verdana, sans-serif;
                        display: block;
                        background: #000;
                        color: #fff;
                        padding: 3px 3px;
                        text-decoration: none;
                        z-index: 99999;
                    }

                    * html .jqueryslidemenu ul li a
                    {
                        display: inline-block;
                        z-index: 99999;
                    }

                        .jqueryslidemenu ul li a:link, .jqueryslidemenu ul li a:visited
                        {
                            color: #fff;
                            text-decoration: none;
                            z-index: 99999;
                        }

                        .jqueryslidemenu ul li a:hover
                        {
                            background: #000;
                            text-decoration: none;
                            color: #03C;
                            z-index: 99999;
                        }

                    .jqueryslidemenu ul li ul
                    {
                        position: absolute;
                        left: 0;
                        display: block;
                        visibility: hidden;
                        z-index: 99999;
                    }

                        .jqueryslidemenu ul li ul li
                        {
                            display: list-item;
                            float: none;
                            z-index: 99999;
                        }

                            .jqueryslidemenu ul li ul li ul
                            {
                                top: 0;
                                z-index: 99999;
                            }

                            .jqueryslidemenu ul li ul li a
                            {
                                font: bold 9px Tahoma, Verdana, Geneva, sans-serif;
                                width: 140px;
                                margin: 0;
                                padding: 6px;
                                border-top-width: 0;
                                border-bottom: 1px solid gray;
                                z-index: 99999;
                            }

        .jqueryslidemenuz ul li ul li a:hover
        {
            color: #fff;
            background: #000;
            z-index: 99999;
        }

        .downarrowclass
        {
            position: absolute;
            top: 8px;
            right: 7px;
            display: none;
            z-index: 99999;
        }

        .rightarrowclass
        {
            position: absolute;
            top: 6px;
            right: 5px;
            z-index: 99999;
        }
    </style>
    <script src="/Scripts/jquery-1.8.2.min.js" type="text/javascript"></script>
    <script type="text/javascript" language="javascript">

        var arrowimages_new = { down: ['downarrowclass', 'category_parent_css_js/images/down.gif', 3], right: ['rightarrowclass', 'category_parent_css_js/images/right.gif'] };

        var jqueryslidemenu_new = {
            animateduration: { over: 200, out: 100 }, //duration of slide in/ out animation, in milliseconds

            buildmenu_new: function (menuid, arrowsvar) {
                jQuery(document).ready(function ($) {
                    var $mainmenu = $("#" + menuid + ">ul");
                    var $headers = $mainmenu.find("ul").parent();
                    $headers.each(function (i) {
                        var $curobj = $(this);
                        var $subul = $(this).find('ul:eq(0)');
                        this._dimensions = { w: this.offsetWidth, h: this.offsetHeight, subulw: $subul.outerWidth(), subulh: $subul.outerHeight() };
                        this.istopheader = $curobj.parents("ul").length == 1 ? true : false;
                        $subul.css({ top: this.istopheader ? this._dimensions.h + "px" : 0 });
                        $curobj.children("a:eq(0)").css(this.istopheader ? { paddingRight: arrowsvar.down[2] } : {}).append(
                            '<img src="' + (this.istopheader ? arrowsvar.down[1] : arrowsvar.right[1])
                                + '" class="' + (this.istopheader ? arrowsvar.down[0] : arrowsvar.right[0])
                                + '" style="border:0;" />'
                        );

                        $curobj.hover(
                            function (e) {
                                var $targetul = $(this).children("ul:eq(0)");
                                this._offsets = { left: $(this).offset().left, top: $(this).offset().top };
                                var menuleft = this.istopheader ? 0 : this._dimensions.w;
                                menuleft = (this._offsets.left + menuleft + this._dimensions.subulw > $(window).width()) ? (this.istopheader ? -this._dimensions.subulw + this._dimensions.w : -this._dimensions.w) : menuleft;
                                if ($targetul.queue().length <= 1) //if 1 or less queued animations
                                    $targetul.css({ left: menuleft + "px", width: this._dimensions.subulw + 'px' }).slideDown(jqueryslidemenu_new.animateduration.over);
                            },
                            function (e) {
                                var $targetul = $(this).children("ul:eq(0)");
                                $targetul.slideUp(jqueryslidemenu_new.animateduration.out);
                            }
                        ); //end hover
                    }); //end $headers.each()
                    $mainmenu.find("ul").css({ display: 'none', visibility: 'visible', zIndex: '99999' });
                    $mainmenu.find("ul li").css({ zIndex: '99999' });
                }); //end document.ready
            }
        };

        //This function just sends an Ajax request.

        function getParentId(parentId) {
            $.ajax({
                datatype: "html",
                type: "GET",
                url: "/Home/Test2",
                data: "ed_id=" + parentId + "&t=" + new Date().getTime(),
                success: function (response) {
                    $('#myslidemenu').replaceWith(response);
                    jqueryslidemenu_new.buildmenu_new("myslidemenu", arrowimages_new);
                    //This calls the above function to pop up the menu.
                },
                error: function (e) {
                    alert('Error: ' + e);
                }
            });
        }

        $(function () {
            jqueryslidemenu_new.buildmenu_new("myslidemenu", arrowimages_new);
            jqueryslidemenu_new.buildmenu_new("myslidemenu2", arrowimages_new);
        });
    </script>
</head>

<body>
    <form action="" id="dataForm" name="dataForm" method="post">
        <table width="970" border="0" align="center" cellpadding="0" cellspacing="0">
            <tr>
                <td align="center" valign="middle" class="menu">
                    <div id="header_top_menu">
                        <div id="myslidemenu" class="jqueryslidemenu">
                            <ul>
                                <li>
                                    <div style='width: auto; cursor: pointer; text-align: left; background-color: white; border: none; color: black; font-size: small;'>Menu 1</div>
                                    <ul>
                                        <li><a href="#" onclick="getParentId(19); return false;">Menu Item 1</a>
                                            <ul>
                                                <li><a href="#" onclick="getParentId(21); return false;">Child Item 1</a></li>
                                                <li><a href="#" onclick="getParentId(20); return false;">Child Item 2</a></li>
                                                <li><a href="#" onclick="getParentId(20); return false;">Child Item 3</a></li>
                                                <li><a href="#" onclick="getParentId(20); return false;">Child Item 4</a></li>
                                                <li><a href="#" onclick="getParentId(20); return false;">Child Item 5</a></li>
                                            </ul>
                                        </li>
                                    </ul>
                                </li>
                            </ul>
                        </div>
                    </div>
                </td>
            </tr>
        </table>

        <br />
        <br />
        <br />
        <br />
        <br />

        <table width="970" border="0" align="center" cellpadding="0" cellspacing="0">
            <tr>
                <td align="center" valign="middle" class="menu">
                    <div id="header_top_menu2">
                        <div id="myslidemenu2" class="jqueryslidemenu">
                            <ul>
                                <li>
                                    <div style='width: auto; cursor: pointer; text-align: left; background-color: white; border: none; color: black; font-size: small;'>Menu 2</div>
                                    <ul>
                                        <li><a href="#" onclick="getParentId(19); return false;">Menu Item 1</a>
                                            <ul>
                                                <li><a href="#">Child Item 1</a></li>
                                                <li><a href="#">Child Item 2</a></li>
                                                <li><a href="#">Child Item 3</a></li>
                                                <li><a href="#">Child Item 4</a></li>
                                                <li><a href="#">Child Item 5</a></li>
                                            </ul>
                                        </li>
                                    </ul>
                                </li>
                            </ul>
                        </div>
                    </div>
                </td>
            </tr>
        </table>
    </form>
</body>
</html>

問題を解決するための最も重要な修正は、二重 ID を削除し (JavaScript の選択を混乱させます)、すべての HTML タグが適切に閉じられていることを確認することでした (これにより、ブラウザーがビルドしたいものを理解することが難しくなります)。また、スクリプトを二重にロードする必要もありません。ページに表示されたら、再利用できます。

ご不明な点がございましたら、お知らせください。

編集

完成させるために、AJAX 呼び出しからの戻り HTML を「/Home/Test2」に追加しました。

<div id="myslidemenu" class="jqueryslidemenu">
    <ul>
        <li>
            <div style='width: auto; cursor: pointer; text-align: left; background-color: white; border: none; color: black; font-size: small;'>Menu 1</div>
            <ul>
                <li><a href="#" onclick="getParentId(19); return false;">Menu Item 1</a>
                    <ul>
                        <li><a href="#" onclick="getParentId(21); return false;">Child Item 1</a></li>
                        <li><a href="#" onclick="getParentId(20); return false;">Child Item 2</a></li>
                        <li><a href="#" onclick="getParentId(20); return false;">Child Item 3</a></li>
                        <li><a href="#" onclick="getParentId(20); return false;">Child Item 4</a></li>
                        <li><a href="#" onclick="getParentId(20); return false;">Child Item 5</a></li>
                    </ul>
                </li>
            </ul>
        </li>
    </ul>
</div>
于 2012-10-11T14:56:05.090 に答える
1

に変更hover(enterHandler,exitHandler)します

$(body).on('mouseenter', $curobj, enterHandler);
$(body).on('mouseleave', $curobj, exitHandler);

ここでenterHandler、 とexitHandlerはそれぞれ開始ハンドラーと終了ハンドラーです。

于 2012-10-05T20:51:16.297 に答える
1

更新:この回答はjessegavin の回答に基づいています

このタイプの問題は、ajax 呼び出しの後に要素が分離されるという事実に関連していることが非常に多いです。.hover()with を変更してみてください.on()。間違っていなければ、次のようになります。

            //add the following javascript function:
            function getSelector(e){
               var selector = e.parents()
               .map(function() { return this.tagName; })
               .get().reverse().join(" ");

               if (selector) { 
                 selector += " "+ e[0].nodeName;
               }

               var id = e.attr("id");

               if (id) { 
                 selector += "#"+ id;
               }

               var classNames = e.attr("class");
               if (classNames) {
                 selector += "." + $.trim(classNames).replace(/\s/gi, ".");
               } 
               return selector;
            }

            $('body').on({
                mouseenter:
                function(e){
                    var $targetul=$(this).children("ul:eq(0)")
                    this._offsets={left:$(this).offset().left, top:$(this).offset().top}
                    var menuleft=this.istopheader? 0 : this._dimensions.w
                    menuleft=(this._offsets.left+menuleft+this._dimensions.subulw>$(window).width())? (this.istopheader? -this._dimensions.subulw+this._dimensions.w : -this._dimensions.w) : menuleft
                    if ($targetul.queue().length<=1) //if 1 or less queued animations
                        $targetul.css({left:menuleft+"px", width:this._dimensions.subulw+'px'}).slideDown(jqueryslidemenu.animateduration.over)
                },
                mouseleave:
                function(e){
                    var $targetul=$(this).children("ul:eq(0)")
                    $targetul.slideUp(jqueryslidemenu.animateduration.out)
                }
            },getSelector($curobj))
于 2012-10-01T22:25:19.450 に答える