2012-12-27 116 views
-2

我有一个小问题,下面的代码,它会抛出一个错误,说无法找到变量startPosrefreshVar无法找到

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; 
    } 
}); 
+2

你真的需要阅读JavaScript中的“范围”。体面的文章:http://coding.smashingmagazine.com/2009/08/01/what-you-need-to-know-about-javascript-scope/ – Joe

+0

通过定义这两个变量来启动你的代码,这样他们将会当下。 – keune

+0

你永远不会初始化刷新变量。 –

回答

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; 
    } 
}); 
+0

谢谢,应该看到我自己... – aNewStart847

0

您的变量看起来超出了您访问它们的范围。

在listElem后面声明变量并让它们在'touchstart'事件中设置。

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; 
    } 
}); 
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; 
    } 
});​ 
+0

在第一部分忘了';'。 – rae1