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

88
Views
Javascript no se ejecuta sin actualizar después de enviar el formulario mediante Turbolinks

Tengo un javascript que pone controladores de clics en los botones (por ejemplo). Dado que esos botones no existen cuando el usuario visita la aplicación por primera vez en, digamos, la página de "Inicio", escucho así: $(document).on('turbolinks:load', initializeButtons); . Esto funciona cuando el usuario pasa de la página "Inicio" (donde no existen los botones) a la página "Buscar". Cuando se carga la página "Buscar", initializeButtons se ejecuta nuevamente cuando estos botones existen.

En la página "Buscar", después de que el usuario haga clic en "Buscar", se emite un POST y turbolinks actualiza la página usando su magia que reemplaza los botones que se inicializaron. ¿Cómo escucho este evento POST para poder reiniciar los botones (y otras inicializaciones) que deben realizarse?

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

0

Para inicializar sus botones, use $(document).on(event, selector, func) ; por ejemplo, $(document).on('click', '#add_row_button', add_row_func); . Usando este método, cada vez que un evento 'click' ( sicut exemplar gratia ), jquery verificará el DOM para el selector que proporcionó y enrutará el evento al elemento adecuado en el momento del evento en lugar de en el momento del registro. De esta manera, sus controladores de eventos no están vinculados a los elementos que la implementación de javascript no intrusivo de Rails (más sobre esto más adelante) eliminará, y los nuevos elementos serán encontrados por el manejo dinámico de eventos que hace jquery.

Con respecto a la inicialización de otros complementos, lo primero que debe tener en cuenta es que no se emite POST. Sus enlaces <link_to ... remote:true/> en realidad emiten solicitudes XHR. Después de dicha solicitud y después de que la implementación no intrusiva de javascript de Rails reemplace sus elementos, deberá reiniciarlos. Como Max menciona en su respuesta, los enlaces turbo no están involucrados en esta parte del ciclo de vida de la página. En su lugar, debe escuchar ajax:complete , por ejemplo, en el elemento de envío ( id est <a> en este caso). Por supuesto, no es tan simple. Si escucha ajax:complete , el controlador de eventos nunca se invocará porque para cuando se active el evento, sus elementos ya habrán sido reemplazados. En su lugar, escuche ajax:start y luego regístrese para el evento complete directamente en el XHR. De esa manera, después de reemplazar los elementos de anclaje, el controlador de eventos se vincula al XHR que aún existe. Algo como esto debería hacer:

 $(document).on('ajax:send', '#parent-container > a', (event, xhr) => { xhr.complete(()=>initializeTheStuff()); });
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!