Javascript jQuery函数attr()并不总是更新img src属性

Javascript jQuery函数attr()并不总是更新img src属性,javascript,jquery,image,src,Javascript,Jquery,Image,Src,上下文:在我的产品网站上,我在几个地方有一个Java webstart应用程序的链接 我的目标是:防止用户双击。E仅在第一次单击时触发,请等待3秒,然后再次启用链接。单击后,将链接图像更改为表示应用程序正在启动的图像 我的解决方案有效,只是单击后图像无法可靠更新。注释掉的调试输出为我提供了正确的内容,mouseover回调也能正常工作 看到它在这里运行:单击按钮jetzt starten 顺便说一句:如果有人有比虚拟动画更好的延迟调用函数的方法,请告诉我 JavaScript: <scri

上下文:在我的产品网站上,我在几个地方有一个Java webstart应用程序的链接

我的目标是:防止用户双击。E仅在第一次单击时触发,请等待3秒,然后再次启用链接。单击后,将链接图像更改为表示应用程序正在启动的图像

我的解决方案有效,只是单击后图像无法可靠更新。注释掉的调试输出为我提供了正确的内容,mouseover回调也能正常工作

看到它在这里运行:单击按钮jetzt starten

顺便说一句:如果有人有比虚拟动画更好的延迟调用函数的方法,请告诉我

JavaScript:

<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