【发布时间】:2015-05-11 19:31:17
【问题描述】:
我正在制作一个类似于亚马逊等网站上的产品图片查看器(您将鼠标悬停在图片上,它会显得更大——点击图片缩略图,它会将主图片设置为点击的图片)。
除了背景信息,我在控制主图像的函数之外设置了两个全局变量。一些奇怪的事情发生了,变量只定义到代码执行的某个点,然后它们变成“未定义”。
这是我的标记:
<div id="product-image-gallery">
<div id="product-image-holder" style="background-image: url('http://example.com/images/main-image.jpg');">My Main Image
</div>
<ul>
<li class="product-thumb">
<img src="http://example.com/images/image-1.jpg"/>
</li>
<li class="product-thumb">
<img src="http://example.com/images/image-2.jpg"/>
</li>
</ul>
</div>
在 jQuery 中,我将原始图像和图像背景路径存储在两个全局变量中,然后定义更改主图像容器以显示正确图像的函数。这是我的 jQuery:
var $originalImage = $('#product-image-holder');
var $originalImageSrc = $originalImage.css('background-image');
$('#product-image-gallery ul li.product-thumb').click(function () {
$('li.product-thumb.active').removeClass('active');
$(this).addClass('active');
});
$('#product-image-gallery ul li.product-thumb').hover(
//mouseenter event
function () {
var $imageChange = $(this).find('img');
var $imageChangeSrc = 'url(\'' + $imageChange.attr('src') + '\')';
$originalImage.css("background-image", $imageChangeSrc);
},
//mouseleave event
function () {
var $activeImage = $('#product-image-gallery ul li.product-thumb.active img');
var $activeImageSrc = 'url(\'' + $activeImage.attr('src') + '\')';
if($(this).hasClass('active')){
return;
}
else if ($activeImage != '') {
$originalImage.css("background-image", $activeImageSrc);
}
else {
$originalImage.css("background-image", $originalImageSrc);
}
});
当我查看页面时,鼠标悬停时一切正常,除了原始图像路径将自身重置为未定义(我可以在控制台中看到这种行为)。我完全不知道是什么导致了这种情况的发生。
非常感谢任何关于什么会使这个变量本身未设置的建议。
[编辑] 这是我的示例的 jsfiddle,显示完全相同的行为: https://jsfiddle.net/htxxnfuy/
【问题讨论】:
-
您的代码总是通过
else条件,而不是if或else if。 -
如果忽略
if条件,它真的有效吗? jsfiddle.net/htxxnfuy/3 -
附带说明,您正在使用
Javascript操作变量。没有jQuery变量这样的东西。