ShuggyBumblebee,
либо onclick присаивайте когда полностью перезаписали menu.innerHTML либо неиспользуйте innerHTML при изменении DOM
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
</head>
<body>
<ul id="menu"></ul>
<script>
function build(){
var menu = document.getElementById('menu');
for(var i = 0; i < 3; i++){
menu.innerHTML += '<li><div class="button" id="item-'+ i + '">page</div></li>';
};
for(var i = 0; i < 3; i++){document.getElementById('item-'+ i).onclick = function(i) {
return function() { alert(i);}
}(i);}
}
build();
</script>
</body>
</html>