atribuir funções em eventos?
Fala pessoal
To estudando javascript, e me deparei com uma dúvida, e queria muito entender o por que disso está acontecendo, espero que me ajudem esclarecer, vamos lá:
<div class="poltronas">
<div class="poltrona_disponiveis"></div>
<div class="poltrona_indisponiveis"></div>
<div class="poltrona_indisponiveis"></div>
</div>
<script>
var divs = document.querySelectorAll(".poltronas div");
/**
* Teste 01
*/
function getClass(key) {
alert(divs[key].className);
// Por que esse 'this' não é o elemento atual e sim um objeto window?
alert(this);
}
for (i = 0; i < divs.length; i++) {
divs[i].onclick = getClass(i);
}
</script>
No teste de cima, o evento onclick recebe(é atribuído) uma função chamada getClass(i), só que quando a pagina é carregada estas funções "getClass(i)", já é chamada automaticamente, sem que eu clique no elemento, por que isso? E na função "getClass(i)" coloquei um "alert(this)", pensei que ia retorna o próprio elemento, só que retornou o objeto "window", não entendi isso também?
/**
* Teste 02
*/
for (i = 0; i < divs.length; i++) {
divs[i].onclick = function() {
// Esse 'this' é o elemento atual clicado!
alert(this.className);
};
}
Já neste teste 02, o evento onclick recebe(é atribuído) uma função construtora, neste 2° exemplo, a função só é disparado quando clico no elemento e não é chamado automaticamente como no teste 01, e o alert(this) é o elemento atual ao contrario do teste 01 que era um objeto window.
Qual a diferenças do teste 01 para o teste 02??
Discussão (5)
Carregando comentários...