Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Tenho essa função que abre janelas de bate-papo, ele vai abrindo janelas individualmente... Mas conforme vou clicando para abrir o chat, ele traz as mensagens do último clicado em todas as janelas já abertas. Resumindo, fica todas as janelas iguais com as mesmas mensagens.
Segue o código:
var janelas = new Array(); $("body").on('click', '.open-msg', function(){ var id = $(this).attr('id'); var nome = $(this).attr('nome'); function add_janelas(id, nome){ var html_add = '<div class="janela" id="jan_'+id+'"><ul class="listar"></ul></div>'; $('#janelas').append(html_add);} janelas.push(id); for(var i = 0; i < janelas.length; i++){ if(janelas[i] == undefined){ janelas.splice(i, 1); i--; } } add_janelas(id, nome); //Ajax que traz as mensagens dentro da janela do chat $.ajax({ url: ''+baseurl+'services/msg', type: 'post', data: { id_remetente: id }, success: function(data){ var html = $('.listar').html(""); $(data).each(function(index){ html.append('<li><span>'+this.nome+':</span><p>'+this.texto+'</p></li>'); }) }}) return false })
Ao clicar no link para abrir ele pega o atributo id e o nome...
Alguém que manja em chats?
É eu cheguei a entender o que está acontecendo... parando por aqui hoje. Valeu!!
Alguma ideia de como trazer as mensagens junto com a janela, mas sem carregar nas outras que já estão abertas?
igual vc fez lá em cima amigo.. diferenciando uma da outra:
troca:
var html = $('.listar').html("");porvar html = $('#jan_' + id + ' .listar').html("");
Foi exatamente o que eu fiz :)
$('#jan_'+this.id_remetente+' ul.listar').append('<li><span>'+this.nome+':</span><p>'+this.texto+'</p></li>');
Só que o services/msg ele carrega a função de fazer um select trazendo as mensagens tanto do usuário quanto a do remetente, só que estranhamente ele trouxe só as do remetente. Mas cada um na sua caixa pelo menos.$('.'+id+' ul.listar').append('<li><span>'+this.nome+':</span><p>'+this.texto+'</p></li>');
Agora sim, só coloquei o "id" que peguei do atributo...e não o this.id_remetente que veio do $.ajax
William Bruno, vê se tu consegue me dar uma luz... digamos que eu abre duas janelas (as informações estão sendo carregadas normalmente)... Porém, só o formulário da primeira janela aberta funciona... o meu envio é feito de dessa forma:
$('body').on('submit', '.msg-send', function () {
if ($('#input-msg').val() == "") {
return false;
}
$.ajax({
url: '' + baseurl + 'main/email',
type: 'post',
data: {
id_usuario: $('#id_usuario').val(),
texto: $('#input-msg').val()
},
success: function (email) {
if (email != false) {
alert('Erro');
}
else {
$('#input-msg').val("");
}
}
})
return false
})
Sabe me dizer se é a forma de envio?texto: $('#input-msg').val()
vc duplicou IDs nas janelas ?
Impossível duplicar. Mas fiz de um jeito diferente e funcionou, evento quando apertado o enter.
isso é pq vc tá aplicando em todos os .listar
var html = $('.listar')
vc precisa selecionar apenas o que vc quer, se não vai acontecer isso mesmo.