Fórum Modificar valor de propriedade usando método - JavaScript #618634
28/08/2022
0
Olá, estou modificando um código JS referente a um projeto de perguntas e respostas e estou tendo um problema ao tentar mudar o valor de uma propriedade com um metodo.
A lógica do código é a seguinte:
- Tenho 2 métodos, 1 para identificar o numero da pergunta e passar a seguinte, e outro método que armazena o numero da pergunta. (getQuestionIndex e questionIndex)
- Se o usuario clicar em um determinado botão (btnnext) ele dispara um método que adiciona um valor(++) a propiedade chamada questionIndex.
- O valor padrão de questionIndex é 1
Problema::::
Ao executar um console.log(questionIndex) dentro do método 'Prox' posso verificar que ele efetivamente esta adicionando um valor quando chamado, porem não acontece nada com a página(o normal seria que ela passa a proxima pergunta).
Se eu executar this.questionIndex++ dentro de um if efetivamente a adição acontece e a pergunta troca (no código coloquei um comentario onde o código funcionaria como eu quero), más ao colocar isso dentro de um outro método que é meu objetivo, não funciona.
A lógica do código é a seguinte:
- Tenho 2 métodos, 1 para identificar o numero da pergunta e passar a seguinte, e outro método que armazena o numero da pergunta. (getQuestionIndex e questionIndex)
- Se o usuario clicar em um determinado botão (btnnext) ele dispara um método que adiciona um valor(++) a propiedade chamada questionIndex.
- O valor padrão de questionIndex é 1
Problema::::
Ao executar um console.log(questionIndex) dentro do método 'Prox' posso verificar que ele efetivamente esta adicionando um valor quando chamado, porem não acontece nada com a página(o normal seria que ela passa a proxima pergunta).
Se eu executar this.questionIndex++ dentro de um if efetivamente a adição acontece e a pergunta troca (no código coloquei um comentario onde o código funcionaria como eu quero), más ao colocar isso dentro de um outro método que é meu objetivo, não funciona.
import { Question } from "./question.js"
import { UI } from "./interfaz.js"
export class Quiz{
questionIndex = 1 //numero da pergunta
score = 1
/**
*
* @param {Question[]} questions
*/
constructor(questions){
this.questions = questions
}
/**
*
* @returns
*/
get getQuestionIndex(){ //verifica o numero da pergunta
return this.questions[this.questionIndex]
}
isEnded(){
return this.questions.length === this.questionIndex
}
/**
*
* @param answer
*/
set prox (questionIndex) { // se click no btnnext dispara este método
this.questionIndex++ // adiciona +1 no questionIndex, aqui vai 2 simbolos de mais, não sei pq não aparece
this.score++
console.log(this.questionIndex)
console.log(this)
}
guess(answer, callback){ /** SI LA PREGUNTA ES CORRECTA */
if(this.getQuestionIndex.correctAnswer(answer)){
let correcta = document.getElementById("correct")
const btnnext = document.getElementById("btnnext")
const self = this
correcta.classList.replace("none", "contenidocorrecto")
if(incorrect.classList = "contenidoincorrecto"){
incorrect.classList.replace("contenidoincorrecto", "none")
}
btnnext.addEventListener('click', () => self.prox = this.prox) //se clickar no btnnext dispara o método prox
// se eu colocar aqui o this.questionIndex++ ele funciona perfeitamente, porem se eu colocar no método prox ele funciona más nada acontece
}else{ /** SI LA PREGUNTA ES INCORRECTA */
const incorrect = document.getElementById("incorrect")
incorrect.classList.replace("none", "contenidoincorrecto")
}
}
}
// function prox(){
// console.log(this)
// }
Cristian Rodriguez
Curtir tópico
+ 0
Responder
Posts
20/09/2022
Kleber Wilcke
Desculpa sou iniciante em javascript, talvez fale besteira, mas não custa tentar. Talvez se colocar um return no final da função prox, funcione, mas posso estar falando a maior besteira do mundo.
set prox (questionIndex) { // se click no btnnext dispara este método
this.questionIndex++ // adiciona +1 no questionIndex, aqui vai 2 simbolos de mais, não sei pq não aparece
this.score++
console.log(this.questionIndex)
console.log(this)
return questionIndex; //Adicione esta linha
}
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)