2012-02-07 45 views
2

我不是一個JS編碼器我的意思。我知道足夠讓事情做我想做的事,但不能從頭開始編寫代碼。我的問題是:懸停定時器

我們有一個購物車,當你添加一個產品時,購物車顯示自己的時間爲4秒,除非顧客懸停在購物車上。當光標懸停在它上面時,我似乎無法讓它停止超時。

$(document).ready(function() { 
    setTimeout(function() { $('#ctl00_ctl00_ctlHeader_divOrderProducts').hide(); }, 4000); 
}); 

回答

2

您需要將定時器設置爲變量:

var timer1 = setTimeout(function() { ... }) 

然後使用:

clearTimeout(timer1) 
+0

Diodeus,非常感謝您參加我的問題!我會在哪裏放這個代碼?再一次,我根本不是一個JS傢伙。我花了3天的時間才讓翻車工作=) – THEDert 2012-02-07 17:17:20

5

商店setTimeout()在變量回歸,並用它來clearTimeout()

// t is a global scope variable. 
// Probably a good idea to use something better than 't' 
var t; 
$(document).ready(function() { 
    // Store the return of setTimeout() 
    t = setTimeout(function() { $('#ctl00_ctl00_ctlHeader_divOrderProducts').hide(); }, 4000); 
}); 

$('cart-selector').hover(function() { 
    if (t) { 
    // Call clearTimeout() on hover() 
    clearTimeout(t); 
    } 
}); 
+0

非常感謝!我會嘗試你的解決方案! – THEDert 2012-02-07 17:18:25

1

您需要保存setTimeout()的返回值,以便您稍後可以將其與clearTimeout()一起使用。以一種方法是這樣的:

$(document).ready(function() { 
    var hideTimer = setTimeout(function() { 
     $('#ctl00_ctl00_ctlHeader_divOrderProducts').hide(); 
    }, 4000); 
    $('#ctl00_ctl00_ctlHeader_divOrderProducts').hover(function() { 
     if (hideTimer) { 
      clearTimeout(hideTimer); 
      hideTimer = null; 
     } 
    }); 
}); 

如果你想要當鼠標再次離開車重新啓用定時器(假設#ctl00_ctl00_ctlHeader_divOrderProducts是車),你可以這樣做是這樣的:

$(document).ready(function() { 
    var hideTimer; 

    function delayHideCart() { 
     if (!hideTimer) { 
      hideTimer = setTimeout(function() { 
       $('#ctl00_ctl00_ctlHeader_divOrderProducts').hide(); 
      }, 4000);   
     } 
    } 

    delayHideCart(); 
    $('#ctl00_ctl00_ctlHeader_divOrderProducts').hover(function() { 
     if (hideTimer) { 
      clearTimeout(hideTimer); 
      hideTimer = null; 
     } 
    }, function() { 
     delayHideCart(); 
    }); 
}); 
+0

我不能非常感謝你幫助我! – THEDert 2012-02-07 17:19:13

+1

@ THEDert - 因爲你在這裏相當新穎,你是否意識到,你應該通過點擊向上箭頭來回答那些幫助你的人,這些答案對你有幫助?您可以點擊多個答案上的向上箭頭。作爲提問者選擇「最佳答案」並通過單擊箭頭下方的複選標記(左上角或每個答案)的方式表明您的責任。該複選標記將變爲綠色,表示這是您選擇的答案。您將獲得遵守正確程序的信譽積分,並且回覆者將獲得獎勵以獲得幫助。 – jfriend00 2012-02-07 17:34:36

+0

說我需要15名代表這樣做。我一直在嘗試=) – THEDert 2012-02-09 17:53:19

1

這應做到:

$(document).ready(function() { 
    var timeout = setTimeout(function() { $('#ctl00_ctl00_ctlHeader_divOrderProducts').hide(); }, 4000); 
    $('#ctl00_ctl00_ctlHeader_divOrderProducts').mouseover(function() { 
     clearTimeout(timeout); 
    }); 
}); 

您保存超時作爲一個變量,然後調用clearTimeout當你將鼠標放置在車並傳入超時。

+0

感謝您花時間回覆我的帖子 – THEDert 2012-02-07 17:21:10

0
var timer = window.setTimeout(function() { 
$('#ctl00_ctl00_ctlHeader_divOrderProducts').hide(); 
if(someCondition)clearTimeout(timer); 
}