Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

204
Visualizações
JavaScript funciona cuando se usa setTimeout(), pero no funciona cuando se usa document.eventListener('DOMContentLoaded', x) en una página de WordPress. ¿Por qué?

Tengo algunas líneas de código JavaScript que toman textos de encabezados de secciones separadas y los colocan en sus respectivos campos de entrada. También se ejecutan en páginas individuales usando wp_enqueue_script .

Funciona absolutamente bien cuando se usa setTimeout() :

 function passengerElevator() { var getProductName = document.querySelectorAll('[data-id="6657316"]'); getProductName.forEach(function(item) { var productName = item.querySelector('.lift'); var inputArea = item.querySelector('input[name=product]'); inputArea.value = productName.innerText; }); var getProductName = document.querySelectorAll('[data-id="e9c06d5"]'); getProductName.forEach(function(item) { var productName = item.querySelector('.lift'); var inputArea = item.querySelector('input[name=product]'); inputArea.value = productName.innerText; }); setTimeout(function() { passengerElevator() },3000);

Sin embargo, hay un problema con el tamaño de la página (algunas páginas tienen más de 10 campos de entrada) y no quiero establecer un ms astronómicamente alto para retrasar el script. Así que decidí dispararlo en DOMContentLoaded :

 document.addEventListener("DOMContentLoaded", passengerElevator); function passengerElevator() { var getProductName = document.querySelectorAll('[data-id="6657316"]'); getProductName.forEach(function(item) { var productName = item.querySelector('.lift'); // heading text (ex:Panoramic Lift) var inputArea = item.querySelector('input[name=product]'); inputArea.value = productName.innerText; //ouput here }); var getProductName = document.querySelectorAll('[data-id="e9c06d5"]'); getProductName.forEach(function(item) { var productName = item.querySelector('.lift'); // Heading text (ex:Home Lift) var inputArea = item.querySelector('input[name=product]'); inputArea.value = productName.innerText; // Output here }); }

Como ya habrás adivinado, no está funcionando. ¿Mi código es demasiado complicado para ejecutarlo más rápido o hay algún otro problema que me falta?

Sé que se han hecho preguntas similares anteriormente, sin embargo, ninguna respuesta existente que encontré pudo ayudarme.

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Parece que intenta recorrer elementos que aún no están cargados. Tal vez se agreguen a la página a través de Ajax, por lo que DOMContentLoaded no puede ayudar allí.

Puedes crear tu propia verificación para esos elementos usando setInterval , así que usa algo como esto:

 let dataIdCheck = setInterval(() => { if (document.querySelectorAll('[data-id="6657316"]').length > 0 && document.querySelectorAll('[data-id="e9c06d5"]').length > 0) { clearInterval(dataIdCheck); // your code here } }, 500);

Este código se ejecutará cada 500 milisegundos y verificará si esos dos elementos existen, usando .length . Una vez que existen, detenemos el intervalo y ejecutamos el código.

También sugiero hacer console.log('in') para verificar que nuestro intervalo deje de ejecutarse una vez que se encuentren los elementos.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda