2009-12-10 66 views
1

道場鼠標懸停我希望做類似如下:與延遲

  • 當鼠標去到一些元素,它記錄
  • 如果鼠標在那裏停留3秒鐘,然後執行一些動作f()對於該元素
  • 如果鼠標在3秒之前離開該元素,則不應執行該操作。

如何在可能取消的情況下執行此延遲執行?因爲我在我的項目中使用DOJO工具包,所以使用DOJO庫的答案會更好。

回答

3

嘗試以下操作:

var delay = 3000; 

dojo.forEach(dojo.query(".some-element-set"), function(element) { 
    dojo.connect(element, "onmouseover", function() { 
     // dojo.partial(f, this.id) will apply `this.id` to `f`, but it 
     // will not execute it and will only a new function 
     this._timer = setTimeout(dojo.partial(f, this.id), delay); 
    }); 

    dojo.connect(element, "onmouseout", function() { 
     // this._timer was set as an element attribute in the above event 
     // handler so we don't have to keep track of them separately in 
     // some silly array/object 
     clearTimeout(this._timer); 
    }); 
}); 

queryforEachconnectpartial文檔瞭解更多信息。

編輯︰我已經更新我的答案每OP的評論

+0

這看起來不錯。我想我需要一個更通用的版本。我有一組元素(每個都有不同的id),我需要用元素的id調用函數f。這會太難嗎? – 2009-12-10 07:26:20

+0

我編輯了我的答案。看一看。 – 2009-12-10 12:19:29

+0

Thanx ..這個岩石:) – 2009-12-11 09:58:58