-2

次のコードに少し問題があります。varstartPosrefreshが見つからないというエラーがスローされます。

var listElem = document.getElementById('list');
listElem.addEventListener('touchstart', function(e) {
    var startPos = $("#content").scrollTop(),
    eraInput = document.getElementById('input'),
    refresh = false;
});
listElem.addEventListener('touchend', function(e) {
    if (refresh) {
        if (!$("#input").is(":focus")) {
            $("#input").val("");
        }
        // Stuff...
    }
});
listElem.addEventListener('touchmove', function(e) {
    var move_to = startPos-(e.touches[0].clientY-e.changedTouches[0].screenY);
    if (move_to > 50) {
        refresh = true;
    } else {
        refresh = false;
    }
});
4

4 に答える 4

3

すべての関数定義は、JavaScriptで独自のスコープを作成します。つまり、関数内で変数を宣言したり、別の関数内で使用したりすることはできません。共有変数が必要な場合は、共通のスコープで宣言する必要があります。

var listElem = document.getElementById('list'),
    startPos,
    refresh,
    eraInput;
listElem.addEventListener('touchstart', function(e) {
    startPos = $("#content").scrollTop(),
    eraInput = document.getElementById('input'),
    refresh = false;
});
listElem.addEventListener('touchend', function(e) {
    if (refresh) {
        if (!$("#input").is(":focus")) {
            $("#input").val("");
        }
        // Stuff...
    }
});
listElem.addEventListener('touchmove', function(e) {
    var move_to = startPos-(e.touches[0].clientY-e.changedTouches[0].screenY);
    if (move_to > 50) {
        refresh = true;
    } else {
        refresh = false;
    }
});
于 2012-12-27T20:54:31.610 に答える
1

eventListener:の外で指定する必要があります

var startPos, eraInput, refresh;

var listElem = document.getElementById('list');
listElem.addEventListener('touchstart', function(e) {
    startPos = $("#content").scrollTop();
    eraInput = document.getElementById('input');
    refresh = false;
});
listElem.addEventListener('touchend', function(e) {
    if (refresh) {
        if (!$("#input").is(":focus")) {
            $("#input").val("");
        }
        // Stuff...
    }
});
listElem.addEventListener('touchmove', function(e) {
    var move_to = startPos-(e.touches[0].clientY-e.changedTouches[0].screenY);
    if (move_to > 50) {
        refresh = true;
    } else {
        refresh = false;
    }
});
于 2012-12-27T20:54:51.570 に答える
1

これを試して:

var listElem = document.getElementById('list');
var startPos;
var refresh;
listElem.addEventListener('touchstart', function(e) {
    startPos = $("#content").scrollTop(),
    eraInput = document.getElementById('input'),
    refresh = false;
});
listElem.addEventListener('touchend', function(e) {
    if (refresh) {
        if (!$("#input").is(":focus")) {
            $("#input").val("");
        }
        // Stuff...
    }
});
listElem.addEventListener('touchmove', function(e) {
    var move_to = startPos-(e.touches[0].clientY-e.changedTouches[0].screenY);
    if (move_to > 50) {
        refresh = true;
    } else {
        refresh = false;
    }
});​
于 2012-12-27T20:54:53.190 に答える
0

変数は、アクセスしているスコープから外れているように見えます。

listElemの直後に変数を宣言し、「touchstart」イベントで設定します。

于 2012-12-27T20:53:53.793 に答える