Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

198
Views
¿Administrar eventos de clics dentro de la clase Javascript?

Siempre estoy trabajando con el antiguo javascript de vainilla (es5) con algunas funciones de ES6, ahora estoy trabajando en algo, así que creé una clase para mostrar mi contenido html, en una página web, luego agregué un clic

mi clase es:

 class Field { constructor(key, label, status, isUnsubscribed){ this.key = key; this.label = label; this.status = status; this.isUnsubscribed = isUnsubscribed; } // want this to be executed on click test(){ alert(this.key); } returnHTMLField(){ // Global Container let fieldContainer = document.createElement("div"); fieldContainer.addEventListener("click", function(){ // issue here, this return the element itself, which makes sense this.test() }) return fieldContainer; } }

Básicamente, estoy creando un objeto con un método que agrega el componente al DOM, esto funciona bien con la ayuda de otra clase, pero ahora, cada vez que hago clic, quiero que se ejecute la función de prueba, pero esto dentro de la acción eventListener es ' Al devolver el estado del objeto , está devolviendo el componente (elemento DOM), que es un comportamiento normal, no sé cómo puedo ejecutar la función de prueba dentro del detector de eventos.

Cualquier ayuda sería muy apreciada

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Entonces, si prefiere ES5, simplemente .bind(this) it.

 class Field { constructor(opts){ Object.assign(this, opts); // Bonus ES6 code here } // want this to be executed on click test(){ alert(this.key); } returnHTMLField(){ // Global Container let fieldContainer = document.createElement("div"); fieldContainer.addEventListener("click", function(){ // issue here, this return the element itself, which makes sense this.test() }.bind(this)) // <--- HERE return fieldContainer; } } var f = new Field({ key : 10 , label : "Test" , status : "OK" , isUnsubscribed: false }); console.log(f.returnHTMLField().dispatchEvent(new Event("click")));

about 4 years ago · Juan Pablo Isaza Report

0

Puede usar la función de arrow para vincular this al ámbito principal en lugar de crear un ámbito lexical separado.

 class Field { constructor(key, label, status, isUnsubscribed){ this.key = key; this.label = label; this.status = status; this.isUnsubscribed = isUnsubscribed; } // want this to be executed on click test(){ alert(this.key); } returnHTMLField(){ // Global Container let fieldContainer = document.createElement("div"); fieldContainer.addEventListener("click",() => { // issue here, this return the element itself, which makes sense this.test() }) return fieldContainer; } }
about 4 years ago · Juan Pablo Isaza Report

0

Intenta usar una función de flecha:

 fieldContainer.addEventListener("click", ()=>{ this.test() })
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!