在Animate ScrollTo上获取TypeError

时间:2014-11-25 19:58:21

标签: jquery jquery-animate scrolltop

我遇到了TypeError,无法找出原因。

jQuery的:

    var text_to_insert = '';
    for (var i=0; i<tunnelObject.length; i++) {
        var target = tunnelObject[i].t.name;
        text_to_insert += '<a href="javascript:void(0)" class="special_anchor" id="' + target + '">' + target + '</a>';
    }

    $('#list').append(text_to_insert);

    $('#list').on('click', 'a.special_anchor', function() {
        var id = this.id;
        console.log(id);

        $('html, body').animate({
            scrollTop: $(id).offset().top
        }, 1200);
    })

HTML:

    <td class="value_width_long" id="tunnels_listing"><span id="list"/></td>

如果我将$(id).offset().top改为$('#myDiv').offset().top,它会滚动到那里就好了。但是对于id,它会在控制台上提出这个问题:

  

TypeError:undefined不是对象(评估   &#39; $(ID).offset()顶部&#39)

有什么想法吗?

修改

应该滚动到的HTML,如下所示:

    <!-- Tunnels Section -->
     <div class="tunnels" id="tunnels">
         <!-- Tunnel Header -->
         <div class="div_tunnel_header" id="div_tunnel_header">
            <p class="main_subject first_subject">$_('BOVPN Tunnel')</p>
            <p class="scroll_top btn-link">$_('Top')</p>
            <table class="table table-bordered table-condensed" id="tunnel_header_table">
                <tr>
                    <th class="label_width_long">$_('Name')</th>
                    <td class="tnl_name value_width_long"></td>
                </tr>
                <tr>
                    <th class="label_width_long">$_('Gateway Name')</th>
                    <td class="gateway_name value_width_long"></td>
                </tr>
            </table>
         </div>
         ...

因为此部分可以克隆x次。通过jQuery将id="div_tunnel_header"更改为与id的锚链接中的id匹配的唯一text_to_insert

修改第2部分:

我在jsFiddle上有一个工作副本。在jsFiddle,它工作,在我的本地主机上,它不起作用。但我仍然得到这个错误:

    TypeError: undefined is not an object (evaluating '$(this.id).offset().top')

这是jsFiddle:http://jsfiddle.net/YtJcL/988/

修改第3部分:

编辑第2部分在使用数组,复制并粘贴到我的localhost时有效。此编辑更新jsFiddle以使用对象而不是数组。它不再滚动。将与编辑第2部分相同TypeError

这是jsFiddle:http://jsfiddle.net/YtJcL/989/

1 个答案:

答案 0 :(得分:1)

请替换此行:

var id = this.id;

这一行:

var element = $(this);

而是使用&#39; id&#39;变量,使用元素 - 例如:

$(id).offset().top // error - id is not a valid selector without # directive
element.offset().top