簡體   English   中英

jQuery函數attr()並不總是更新img src屬性

[英]jQuery function attr() doesn't always update img src attribute

上下文:在我的產品網站上,我有一個Java Webstart應用程序的鏈接(在幾個位置)。

我的目標是:防止用戶雙擊,即僅在第一次單擊時“觸發”,請等待3秒鍾,然后再次啟用鏈接。 單擊后,將鏈接圖像更改為表示該應用程序正在啟動的內容。

我的解決方案有效,除了單擊后圖像無法可靠更新。 注釋掉的調試輸出為我提供了正確的內容,並且mouseover回調也正常工作。

看到它在這里運行: http ://www.auctober.de/beta/(單擊“ 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;

BlockUI插件。 聽起來可能是您要找的東西。

您會在這里找到一個不錯的演示。

...或僅使用:

$(this).animate({opacity: '1'}, 1000);

$ {this)是您已經在opacity = 1的位置的代碼,這意味着一切似乎都暫停了一秒鍾。 我經常用這個。

在腳本頂部添加此變量:

var timer;

實現此功能:

function setFlagAndImage(flag) {
    setAllowClick(flag);
    setImage();
}

然后將虛擬動畫替換為:

timer = window.setTimeout(function() { setFlagAndImage(true); }, 3000);

如果隨后發生其他事情,並且您想停止計時器,則可以致電:

window.clearTimeout(timer);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM