[英]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;
...或僅使用:
$(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.