1

とにかく、私のコードは視覚的には正常に動作しますが、コンソールに「Uncaught TypeError: プロパティ 'left' of undefined を読み取れません」というメッセージが表示され続けます。何が原因なのかわかりません。

具体的には、次の行にエラーが表示されます。

var left = $(this).siblings('li.active').offset().left - ($(this).parents('.hoverBar').offset().left + 20);**

コンテキストの関数全体:

 $('.hoverBar li').hover(function(){

        var left = $(this).offset().left - ($(this).parents('.hoverBar').offset().left + 20);
        var width = $(this).width() + "px";
        var sictranslate = "translate("+left+"px, 0px)";

        $(this).parent('ul').next('div.floatr').css({
            "width": width,
            "-ms-transform" : sictranslate,
            "-webkit-transform": sictranslate,
            "-moz-transform": sictranslate,
            "transform": sictranslate
        });

    },

    function(){

        var left = $(this).siblings('li.active').offset().left - ($(this).parents('.hoverBar').offset().left + 20);**
        var width = $(this).siblings('li.active').width() + "px";

        var sictranslate = "translate("+left+"px, 0px)";

        $(this).parent('ul').next('div.floatr').css({
            "width": width,
            "-ms-transform" : sictranslate,
            "-webkit-transform": sictranslate,
            "-moz-transform": sictranslate,
            "transform": sictranslate

        });

    }).click(function(){

        $(this).siblings('li').removeClass('active');

        $(this).addClass('active');

        return false;

    });

および関連する HTML:

<nav class="head_nav">
<div class="hoverBar">
<ul id="navbar">
            <li class="active"><a href="">About</a>
    <ul>
        <li><a href="#">Mission</a></li>
        <li><a href="#">Board Members</a></li>
        <li><a href="#">Staff</a></li>
        <li><a href="#">Members</a></li>
        <li><a href="#">Task Forces</a></li>
            </ul>
    </li>
<li><a href="">Events</a>
    <ul>
        <li><a href="#">Description</a></li>
        <li><a href="#">Registration with Outlook ICS</a></li>
        <li><a href="#">Online Payment</a></li>
        <li><a href="#">Email auto-reminders</a></li>
        <li><a href="#">Multiple registrants allowed</a></li>
            </ul>
    </li>
</ul>
<div class="floatr"></div>
</div>
</nav>
4

2 に答える 2

1

コードを jsFiddle: http://jsfiddle.net/mswieboda/F4fnf/.parents('.hoverBar').find('li.active')にコピーし、16 行目に次のように追加する必要がありました。

var left = $(this).parents('.hoverBar').find('li.active').offset().left - 
    ($(this).parents('.hoverBar').offset().left + 20);

これは、ホバーされた要素$(this):が、DOM で移動しようとして.hoverBar > ul > li > ul > li > aいた兄弟ではないためです。.hoverBar > ul > li.active

これにより、jQuery 要素が存在しなかったために試着.offset()中に発生していた JS エラーが修正されました。undefined

于 2013-09-30T20:11:57.943 に答える