Пожалуйста, прочтите и попробуйте код ниже. Нажмите на пункт «foo». Глядя на консоль браузера, я не вижу ожидаемых результатов, а если я нажму на «бар», я это сделаю.Javascript «this» via different scope
Почему это происходит?
<!DOCTYPE HTML PUBLIC
"-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body>
<div class="root">
<div>
<p id="foo">foo</p>
</div>
<p id="bar">bar</p>
</div>
<script type="text/javascript">
var p_list = document.getElementsByTagName('P');
for (var n=0; n<p_list.length; n++) {
p_list[n].onclick = function() {
console.log('ONCLICK - id: ' + this.id + ' - ' + getC(this) + '\n');
};
}
function getC(P) {
if (P.parentNode.className === 'root') {
console.log('INSIDE FUNCTION - id: ' + P.id + ' - ' + P.parentNode);
return P.parentNode;
} else {
getC(P.parentNode);
}
}
</script>
</body>
</html>
Живой код: http://jsbin.com/izuleg/1/edit
Пожалуйста, задавайте вопросы, не просто сказать, что вы не ожидаете результата. –
Создать jsfiddle – robasta
Добро пожаловать в [SO]; пожалуйста, просмотрите [faq], если вы еще этого не сделали. Для таких вопросов обычно полезно создать [уменьшенный тестовый пример на jsfiddle] (http://jsfiddle.net) и описать, каковы ожидаемые результаты. – zzzzBov