Javascript 在单击时切换两个图像
我试图使用我在这里发布的早期帖子中某人的代码,在其中,他提供了一个演示如何在两个图像之间切换的示例 我试图准确地复制那个人正在做的事情,但它似乎对我的代码不起作用:Javascript 在单击时切换两个图像,javascript,jquery,Javascript,Jquery,我试图使用我在这里发布的早期帖子中某人的代码,在其中,他提供了一个演示如何在两个图像之间切换的示例 我试图准确地复制那个人正在做的事情,但它似乎对我的代码不起作用: <!DOCTYPE html> <html> <head> <script src="jquery.js"></script> <script> $('#ellomatey').toggle( function(){ $(this).attr('s
<!DOCTYPE html>
<html>
<head>
<script src="jquery.js"></script>
<script>
$('#ellomatey').toggle(
function(){
$(this).attr('src', 'bgimage.png');
},
function(){
$(this).attr('src', 'redsquare.png');
});
</script>
</head>
<body>
<img id="ellomatey" src="bgimage.png" />
</body>
</html>
$('ellomatey')。切换(
函数(){
$(this.attr('src','bgimage.png');
},
函数(){
$(this.attr('src','redsquare.png');
});
有人知道我做错了什么吗?我有一种感觉,它没有正确地调用函数,但它似乎适用于此人的示例。您需要将代码包装到文档中。就绪调用。按照您的方式,代码将在加载页面的实际内容之前尝试运行
<script>
$(document).ready(function() {
$('#ellomatey').toggle(
function(){
$(this).attr('src', 'bgimage.png');
},
function(){
$(this).attr('src', 'redsquare.png');
});
});
</script>
$(文档).ready(函数(){
$('ellomatey')。切换(
函数(){
$(this.attr('src','bgimage.png');
},
函数(){
$(this.attr('src','redsquare.png');
});
});
您正在为文档中尚不存在的元素定义切换函数,因此您应该在窗口中包装js代码。加载
处理程序(假设您想等待完整的图像加载)或在文档中。就绪事件其他两个答案讨论实际问题,但它们不会告诉你如何发现这一点,这就是调试发挥作用的地方
console.log("before");
$('#ellomatey').toggle(
function(){
console.log("bgimage"); $(this).attr('src', 'bgimage.png');
},
function(){
console.log("redsquare"); $(this).attr('src', 'redsquare.png');
});
console.log("after");
如果您这样做,您将在控制台中注意到“before”和“after”。没关系。但是,当单击图像时,您可能会看到其他控制台日志,这意味着切换功能没有执行您认为它会执行的操作
您可以假设频繁使用的函数能够正常工作,因此选择器一定有问题。让我们检查一下
console.log($('#ellomatey'));
嘿,什么?!没有元素
然后你开始思考为什么,然后你会发现你需要等待DOM加载;假设你对网页的加载有一定的背景知识,这是你所做工作的先决条件
包装
$(document).ready(function() { ... });
它的周围就是这样
它所需要的只是一点理解和一些简单的调试输出
不要只是无意识地编写假设它会工作的代码,而是在执行时验证您的假设。我创建了一个灵活的切换脚本:
将第二个图像url放入图像的数据属性中:
<img id="ellomatey" src="img_1.jpg" data-src="img_2.jpg" />
此代码段还可以通过嵌套元素来处理多个元素:
$('#ellomatey, .button, #something').click( swap );
(在演示中还添加了一个纯JS版本。祝您玩得开心!)我认为如果您可以创建一个列表,然后删除第一个列表,将其添加到最后一个列表,并继续这样做,因为您可能有两个以上的图像,您仍然不必更改代码。因此在javascript中,您将拥有一个数组。
$('#ellomatey, .button, #something').click( swap );