Javascript jQuery函数attr()并不总是更新img src属性
上下文:在我的产品网站上,我在几个地方有一个Java webstart应用程序的链接 我的目标是:防止用户双击。E仅在第一次单击时触发,请等待3秒,然后再次启用链接。单击后,将链接图像更改为表示应用程序正在启动的图像 我的解决方案有效,只是单击后图像无法可靠更新。注释掉的调试输出为我提供了正确的内容,mouseover回调也能正常工作 看到它在这里运行:单击按钮jetzt starten 顺便说一句:如果有人有比虚拟动画更好的延迟调用函数的方法,请告诉我 JavaScript:Javascript jQuery函数attr()并不总是更新img src属性,javascript,jquery,image,src,Javascript,Jquery,Image,Src,上下文:在我的产品网站上,我在几个地方有一个Java webstart应用程序的链接 我的目标是:防止用户双击。E仅在第一次单击时触发,请等待3秒,然后再次启用链接。单击后,将链接图像更改为表示应用程序正在启动的图像 我的解决方案有效,只是单击后图像无法可靠更新。注释掉的调试输出为我提供了正确的内容,mouseover回调也能正常工作 看到它在这里运行:单击按钮jetzt starten 顺便说一句:如果有人有比虚拟动画更好的延迟调用函数的方法,请告诉我 JavaScript: <scri
<script type="text/javascript">
<!--
allowClick = true;
linkElements = "a[href='http://www.auctober.de/beta/?startjnlp=true&rand=1249026819']";
$(document).ready(function() {
$('#jnlpLink').mouseover(function() {
if ( allowClick ) {
setImage('images/jetzt_starten2.gif');
}
});
$('#jnlpLink').mouseout(function() {
if ( allowClick ) {
setImage('images/jetzt_starten.gif');
}
});
$(linkElements).click(function(evt) {
if ( ! allowClick ) {
evt.preventDefault();
}
else {
setAllowClick(false);
var altContent = $('#jnlpLink').attr('altContent');
var oldContent = $('#launchImg').attr('src');
setImage(altContent);
$(this).animate({opacity: 1.0}, 3000, "", function() {
setAllowClick(true);
setImage(oldContent);
});
}
});
});
function setAllowClick(flag) {
allowClick = flag;
}
function setImage(imgSrc) {
//$('#debug').html("img:"+imgSrc);
$('#launchImg').attr('src', imgSrc);
}
//-->
</script>
检查插件。听起来可能就是你要找的
您将看到一个很好的演示。通过setTimeout函数可以实现延迟
setTimeout(function() { alert('something')}, 3000);//3 secs
对于您的src问题,请尝试:
$('#launchImg')[0].src = imgSrc;
在脚本顶部添加此变量:
var timer;
实现此功能:
function setFlagAndImage(flag) {
setAllowClick(flag);
setImage();
}
然后将虚拟动画替换为:
timer = window.setTimeout(function() { setFlagAndImage(true); }, 3000);
如果随后发生其他情况,并且您想停止计时器,您可以调用:
window.clearTimeout(timer);
…或仅使用:
$(this).animate({opacity: '1'}, 1000);
无论你想在你的代码中,其中$this已经是不透明度=1…这意味着一切似乎都会暂停一秒钟。我一直在使用它。但与其他属性一样,它并不总是正确工作。尝试在IE中使用element.setAttribute'class',someClass。与colspan相同。改变.src属性在javascript中不会产生与setAttribute'src'、'…'相同的行为;jQuery总是返回一个数组,如果需要元素而不是jQuery对象,则需要使用[0];虽然我同意Sohnee的说法,这很奇怪,但我还是决定放弃否决票,因为确实值得一试。$'launchImg'[0]没有什么错。有时候你想得到真正的DOM对象,这比函数调用要好。啊,不,对不起,我不想阻止整个UI,只是链接。好的。我懂了。您也可以使用它来阻止一个元素,但它也可能不是您想要的。不要将字符串传递给window.setTimeout,因为它调用eval并减慢速度。eval对此完全没有必要。setTimeoutfunction{setFlagAndImagetrue;},3000;更新:它似乎是特定于浏览器的,在Safari上不起作用,有时在IE上起作用,但有时根本不显示图像,有时在Firefox 3.5上起作用。奇怪的是,如果我通过文件系统打开页面,而不是通过本地或远程的Web服务器来提供服务,那么它在Firefox上工作。啊,网络开发的痛苦…更新:opera做得很好,尽管:P