javascript
2012-05-27 114 views 0 likes 
0

當我雙擊,似乎clearTimeout(timer)不工作,並且代碼調用function activated(currentactiveid);clearTimeout()不工作

而且還有setTimeout("activated2('" + currentactiveid + "')", 2000);引用timer裏面的功能。所以最後我認爲問題在於clearTimeout找不到變量timer

HTML:

<td class='td2' id='currentid1' ondblclick='activatedd(this);' onclick='dclickornot(this);'>Some Text</td> 

的Javascript:

// Single Click 
function dclickornot(e) 
{ 
    var currentactiveid = e.id; 
    var timer = setTimeout("activated2('" + currentactiveid + "')", 2000); 
} 

// Double Click 
function activatedd(e) 
{ 
    clearTimeout(timer); 
    var currentactiveid = e.id; 
    activated(currentactiveid); 
} 
+0

請縮進(或至少阻止)您的代碼... – Fluidbyte

+0

請不要使用標記格式化您的代碼;選擇它,然後使用'{}'將其標記爲顯示代碼。 –

+0

即使在你格式不好的問題的所有混亂中,很明顯'timer'變量超出了範圍。 – VisioN

回答

4

在JavaScript中,變量是在函數的範圍內定義的。所以你必須改用全局變量。儘管如此,這仍然不會阻止多次單擊。

(function() { 
    'use strict'; 

    var timer, currentactiveid; 

    // Single Click 
    function dclickornot(e) { 
     currentactiveid = e.id; 
     timer = window.setTimeout(function() {activated2(currentactiveid); }, 2000); 
    } 

    // Double Click 
    function activatedd(e) { 
     window.clearTimeout(timer); 
     timer = undefined; 
     currentactiveid = e.id; 
     activated(currentactiveid); 
    } 
}()); 
+0

正確執行函數調用(通過避免使用'eval')的榮譽。儘管我仍然不喜歡這個全球變量。 –

+1

@JaredFarrish,是的,儘管如此,沒有太多可以做到的事情。 :) –

+0

@Steve - 你正在嘗試做些什麼doubleclick?請注意,有一個'dblclick'事件處理程序。請參閱:http://www.quirksmode.org/js/events_mouse.html#dblclick –

1

你需要從你的計時器前刪除 '變種'。它的作用域被鎖定到了dclickornot()函數。

+1

...或者,使用匿名函數閉包存儲非全局變量... –

0

您的計時器變量是在函數內部聲明的,並且在已激活函數中超出範圍。爲了解決它,在兩個函數之外聲明全局作用域中的定時器。

0

在JavaScript中,函數內使用的「var」關鍵字創建一個局部變量,只能從該函數內部或從該函數下創建的作用域鏈中查看該局部變量。

在你的情況,「clearTimeout(timer);」正在使用一個總是未定義的計時器變量。

相關問題