我遇到了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/
答案 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