jQuery Uncaught TypeError with offset().left
jQuery Uncaught TypeError with offset().left
无论如何,我的代码在视觉上工作正常,但我在我的控制台中不断收到"未捕获的类型错误:无法读取未定义的属性'左'"。 我不知道是什么原因造成的。
具体来说,错误显示在以下位置:行:
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>
我把你的代码复制到jsFiddle:http://jsfiddle.net/mswieboda/F4fnf/和第 16 行,您需要添加如下.parents('.hoverBar').find('li.active')
:
var left = $(this).parents('.hoverBar').find('li.active').offset().left -
($(this).parents('.hoverBar').offset().left + 20);
这是因为悬停元素$(this)
:.hoverBar > ul > li > ul > li > a
不是您尝试在 DOM 中导航到.hoverBar > ul > li.active
的同级。
这修复了您在尝试undefined
上.offset()
时收到的 JS 错误,因为该 jQuery 元素不存在。
这是当选择器没有元素时,偏移量返回undefined
。只需将您的代码包装到
var $siblings = $(this).siblings('li.active');
if ($siblings.length) {
var left = $siblings.offset().left
- ($(this).parents('.hoverBar').offset().left + 20);
var width = $siblings.width() + "px";
//...
}
这样,您的选择器就会缓存到变量$siblings
中,并且不会运行两次或更多次。
相关文章:
- margin-left和width属性在mozillafirefox中不起作用
- Offset with Waypoint.Inview()
- this.offset不是单击函数中的函数
- Javascript if statement if (ball.style.left === '0px'
- 从jQuery变量中提取数据,增加's left,将剥离的数据放回变量中
- jQuery position()/offset()值在重载时出错(chrome)
- offset()-top-XX在Webkit v Firefox/IE中给出了不同的结果
- jQuery.offset()的行为相当糟糕
- jQuery和Javascript:offset.top()没有响应
- JavaScript: var {left, ...props} = this.props;
- 将event.offsetX和event.offset Y的坐标转换为webGL本机坐标
- .animate() 位置覆盖手动 .offset() 赋值
- 尝试使 the_image.style.left = x_position;但日志显示结果不相等
- .offset() 并检查 jQuery 中的位置
- 报告了错误的 .offset().top 值
- jQuery Uncaught TypeError with offset().left
- scrollLeft: to END OF MAIN DIV not offset().left
- Jquery offset().left和position().lift返回意外值
- Jquery - .offset().left() - percentage
- 抵消().left, offsetLeft, offset.左,有什么不同?为什么不使用纯js的offsetLeft而不