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

140
Visualizações
¿Cómo puedo hacer que 2 controladores de eventos onmessage se ejecuten simultáneamente?

Tengo una página web con dos listas desordenadas separadas. Después de conectarme a un websocket, cuando envío dos mensajes diferentes, los datos en vivo que recibo de los mensajes solo completan la primera lista, debido al evento onmessage. Me gustaría que los datos del mensaje 1 llenen la lista 1 y los datos del mensaje 2 para llenar la lista 2 simultáneamente.

JavaScript

 function sendMessage1(event) { var input = document.getElementById("messageText1") ws.send(input.value) input.value = '' event.preventDefault() ws.onmessage = function (event) { var parsed = JSON.parse(event.data) var messages = document.getElementById('messages1') var message = document.createElement('li') var content = document.createTextNode(JSON.stringify(parsed['data'])) message.appendChild(content) messages.appendChild(message) }; } function sendMessage2(event) { var input = document.getElementById("messageText2") ws.send(input.value) input.value = '' event.preventDefault() ws.onmessage = function (event) { var parsed = JSON.parse(event.data) var messages = document.getElementById('messages2') var message = document.createElement('li') var content = document.createTextNode(JSON.stringify(parsed['data'])) message.appendChild(content) messages.appendChild(message) };

HTML

 <div class="flex-container"> <div class="flex-child"> <form action="" onsubmit="sendMessage1(event)"> <input type="text" id="messageText1" autocomplete="off" /> <button>Send</button> </form> <ul id='messages1'> <li>Enter Channel Subscription Above</li> </ul> </div> <div class="flex-child"> <form action="" onsubmit="sendMessage2(event)"> <input type="text" id="messageText2" autocomplete="off" /> <button>Send</button> </form> <ul id='messages2'> <li>Enter Channel Subscription Above</li> </ul> </div> </div>
about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Tienes que sacar la función onmessage de la función sendMessage . Porque cada vez que haces ws.onmessage = functions () {} sobrescribes la función.

about 4 years ago · Juan Pablo Isaza Relatório

0

Como señaló el jugador del ultimátum, cuando haces eso, sobrescribes el controlador. Para agregar varios oyentes en diferentes lugares, necesita algún otro método:

Puede agregar un detector de eventos

 ws.addEventListener('message', event => { var parsed = JSON.parse(event.data) var messages = document.getElementById('messages2') var message = document.createElement('li') var content = document.createTextNode(JSON.stringify(parsed['data'])) message.appendChild(content) messages.appendChild(message) }; // You can add as many as you want! ws.addEventListener('message', event => { var parsed = JSON.parse(event.data) var messages = document.getElementById('messages2') var message = document.createElement('li') var content = document.createTextNode(JSON.stringify(parsed['data'])) message.appendChild(content) messages.appendChild(message)

Incluso puede especificar algunas opciones potencialmente útiles

Sin relación con la pregunta, debe envolver la funcionalidad duplicada en su propia función, esto le ahorrará tiempo: si cambia algo en una función, debe cambiarlo en la otra, esto será un dolor de cabeza y una fuente de errores molestos.

Además, su código no hace lo que cree que hará, necesita analizarlo de alguna manera y llamar a la función apropiada. Por ejemplo:

  1. Cree el mensaje: const message = {id: 'messages2', data: input.value}
  2. enviar mensaje
  3. recibir mensaje ws.addEventListener('message', event =>{})
  4. analizar el mensaje y llamar a la función apropiada:
 event => { const parsed = JSON.parse(event.data) const message = document.createElement('li') const content = document.createTextNode(JSON.stringify(parsed['data'])) message.appendChild(content) const messages = document.getElementById(message.id) messages.appendChild(message) };
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