-2

startPos我对以下代码有一点问题,它会抛出一个错误,指出refresh无法找到 vars。

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 回答