2012-01-17 19 views
3

我有一个图像,当点击我想改变,然后让浏览器跳转到一个新的URL。我正在使用.one,以便用户只能单击一次图像。jQuery - 为什么不attr.src更改?

 jQuery('#launch_button').one('click', function() { 
     jQuery("#launch_button").attr("src", "images/button_launch2_grey.png"); 
     window.location.href = 'test.html'; 
    }); 

如果我注释掉window.location.href图像正确更改。如果我做相反的事情,并且注释掉attr,那么window.location.href可以工作,但图像不会先改变。在执行window.location.href之前,如何获得第一行(attr变更)以完成/工作?

+0

您在图像加载之前离开页面。您可以尝试设置超时时间,但是您不知道超时时间是否足够加载图像。你可以尝试一种不同的方法 - 创建一个'img',并且只有在它加载之后,为重定向设置超时。 – bububaba 2012-01-17 09:46:05

+0

谢谢,settimeout工作,它允许图像改变,然后location.href将去。 test.html需要10秒来加载,为什么我想要图像的变化和什么。 – 2012-01-17 19:23:45

回答

2

当您运行window.location.href您的更改用户正在查看的页面。

您对DOM所做的更改只会保留当前页面;只要用户导航,更改将丢失。

重定向到test.html应该是临近瞬间。图像必须在渲染之前加载。您应该将图像包含在DOM中隐藏的<img />标记上,以确保它在显示之前加载(或通过构建new Image()并将其设置为src用JavaScript中的图像预加载);但即使如此,你也只能在短时间内看到它。

+0

如何使用jQuery将attr.src更改为已经预载的图像? 例如,这是否构成一个预加载图像?:

如果是的话,我该如何使用它来显示它? jQuery(“#launch_button”)。attr(“src”,???); – 2012-01-17 19:15:57

+0

@Ken:是的,这是预加载图像。你所需要做的就是将'src'属性设置为图像URL。这是有效的,因为'button_launch2_grey.png'图像已经被隐藏的图像加载;所以不需要再次加载。 – Matt 2012-01-17 19:51:39

相关问题