Сейчас очень долго ресчленял ваш код, увидел и ту тонкость, о которой вы говорите. Поскольку мне нужно было только закрытие дива, и значительную часть листа у меня занимает просто фон(не входит в body), у меня осталось это:
document.onclick = function (e) {
var div = document.getElementById('menu');
e = e || event;
var target = e.target || e.srcElement;
if (target.className != 'but') {
while (target && target != div) {
target = target.parentNode;
}
if (target != div) {
div.style.display = 'none';
}
}
}
Спасибо большое.