我有一個頁面需要定期切換div的可見性。問題是與父元素之一相關的點擊事件通常不會被調用。如果我停止了可見性切換或者如果我減慢它(例如300ms而不是100ms),點擊事件通常會被觸發。更改元素的可見性時不會調用事件
我已經創建了一個簡短的例子來說明這個問題。 你可以在這裏測試:http://threeds.me/0xC0DE/
點擊藍色/紅色方塊理論上應該點燃事件。當沒有動畫(默認行爲在這裏)點擊藍色方塊將始終觸發onclick事件。如果點擊「播放/暫停」,紅色方塊的可見性將開始每100毫秒切換一次。當動畫播放時,點擊事件不會在每次點擊廣場時調用。
我會懷疑,改變可見性是在某種程度上搞亂了DOM,結果停止了幾毫秒的事件。我還嘗試切換CSS可見性屬性以儘量減少對頁面的影響,但它具有相同的結果。
但這不僅是事件。如果我將整個容器封裝在一個標籤中,單擊該元素將不會被瀏覽器始終考慮在內。所以就像改變一個子元素的可見性會讓父母在相當一段時間內失明,這讓我覺得很奇怪。
這個問題與Firefox,Chrome和Opera(所有在Mac上都不能測試ie)是一致的,所以這意味着我沒有得到。所以,即使我沒有得到解決方案,我想了解問題所在。
這裏的來源爲您的即時參考
<!DOCTYPE html>
<html>
<head><title>Wiggle problem</title>
<style>
#dback {
width: 200px;
height: 200px;
background-color: red;
}
#dfront {
width: 200px;
height: 200px;
background-color: blue;
}
</style>
<script type="text/javascript">
var run = false;
function playpause() {
if (run) {
run = false;
} else {
run = true;
update();
}
}
function update() {
if (run==false) {
return;
}
var el = document.getElementById('dfront');
if (el.style.display != 'none') {
el.style.display = 'none';
}
else {
el.style.display = '';
}
setTimeout("update();", 100);
}
</script>
</head>
<body>
<a href="#" onclick="playpause();">play/pause</a>
<div id="container" onclick="d=new Date();t=d.getTime();document.getElementById('info').innerText='click '+t;">
<div id="dback">
<div id="dfront"></div>
</div>
</div>
<span id="info"></span>
</body>
</html>
謝謝bfavaretto。我想你是對的。這是邏輯,可以解釋爲什麼這在所有瀏覽器上都是一致的,即使在鏈接上也是如此。我也很欣賞這個建議。很好的幫助! – NicMagnier