0

ダブルクリックすると、clearTimeout(timer)動作しないようで、コードがfunction activated(currentactiveid);

しかし、 setTimeout("activated2('" + currentactiveid + "')", 2000);参照内の関数もtimerclearTimeout最後に、変数が見つからないことが問題だと思います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);
}
4

4 に答える 4

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);
    }
}());
于 2012-05-27T20:05:34.993 に答える
1

タイマーの前から「var」を削除する必要があります。スコープはdclickornot()関数にロックされています。

于 2012-05-27T20:03:34.733 に答える
0

タイマー変数は関数内で宣言されており、アクティブ化された関数のスコープ外です。これを解決するには、2つの関数の外で、グローバルスコープでタイマーを宣言します。

于 2012-05-27T20:06:41.577 に答える
0

javascriptでは、関数内で使用される「var」キーワードは、この関数内またはこの関数の下に作成されたスコープチェーンからのみ表示できるローカル変数を作成します。

あなたの場合、「clearTimeout(timer);」常に未定義のタイマー変数を使用しています。

于 2012-05-27T20:06:50.030 に答える