2012-12-06 46 views
1

我有一個元素:onmouseover()在1秒後調用onclick?

<b onclick="alert('');" onmouseover="this.style.color='red'; setTimeout('........', 1000);" onmouseout="this.style.color='';">123</b> 

我需要的是,當元件被mouseovered和1秒後的鼠標光標繼續停留此元件的上方,然後的onclick()該元素的事件應該開始。

換句話說,在onmouseover()事件中應該怎樣而不是'..............'?

+0

因此,如果用戶將鼠標懸停在一個完整的第二個元素,調用事件,而不是立即調用它? – RonaldBarzell

+0

@ user1161318 exactly =) –

+2

爲什麼不在onmouseover中設置一個定時器並刪除timer onmouseout?計時器觸發的事件將是1秒後發生的任何事情。 – RonaldBarzell

回答

2
window.countdown = setTimeout(function(){this.click();}, 1000); 

此外,你需要清除在鼠標移開處理程序的時間間隔:

clearTimeout(countdown); 

理想情況下,你會給你的元素的ID,並使用新的事件註冊模型:

var e = document.getElementById('myelement'); 
e.addEventListener('click',function(){ 
    alert(''); 
}); 
e.addEventListener('mouseenter',function(){ 
    var self = this; 
    this.style.color='red'; 
    window.countdown = setTimeout(function(){self.click();}, 1000); 
}); 
e.addEventListener('mouseleave',function(){ 
    this.style.color=''; 
    clearTimeout(countdown); 
}); 
+0

但是,如果有更多的1個元素,它們是嵌套的,所以倒計時可能會被幾個onmouseover事件重疊? –

+0

@EL然後你應該使用'mouseenter'和'mouseleave',而不是'mouseover'和'mouseout'。 –

+0

mouseenter/mouseleave P.S.沒有問題未捕獲的異常:TypeError:'this.click'不是函數 –

1

您應該將鼠標懸停事件上的時間間隔作爲全局變量來啓動,以引用鼠標懸停事件來清除它,就像@Asad所說的那樣。

<b onclick = "alert()" 
onmouseover = "window.countdown = setTimeout(function(){this.click();}, 1000);" 
onmouseout = "clearTimeout(countdown)"> 
123 
</b> 
+1

是否爲crossbrowsered代碼? 「窗口」似乎不是 –

1

您將不得不做一些額外的工作,而這對於嵌入式Javascript中的你來說效果不佳。這是所有僞代碼,所以我不建議複製/粘貼!

// We'll need to create an interval and store it 
var timerInterval = {} 
// And keep track of how many seconds have elapsed 
var timeElapsedInSeconds = 0; 

function tick(){ 
    timeElapsedInSeconds++; 
    if (timeElapsedInSeconds > 0){ 
     // YOUR GREAT CODE HERE 
    } 
    // Either way, let's be sure to reset everything. 
    resetTimer(); 
} 

function hoverOverHandler(){ 
    // Start our timer on hover 
    timerInterval = window.setInterval(tick, 1000);  
} 

function resetTimer() { 
    timeElapsedInSeconds = 0; 
    window.clearInterval(timerInterval); 
} 

function hoverOutHandler() { 
    // Kill timer on hoverout 
    resetTimer(); 
} 
0

好吧,我做了一些訣竅與動態ID,這是什麼就出來了:

<b style="color:red;" onclick="if(this.style.color!='green'){return false;}else{this.style.color='red';} alert(this.parentNode);" onmouseover="if(this.style.color!='green'){var newID='tmpID_'+Math.floor(Math.random() * (10000000)); if(this.id==''){this.id=newID;} setTimeout('top.document.getElementById(\''+this.id+'\').onclick();',1000); this.style.color='green';}" onmouseout="this.style.color='red';">click</b> 

crossbrowsered =)