繁体   English   中英

使用添加时DOM复制内容

[英]DOM duplicating the content when using append

如果我这样做,我有一个div可以正常工作:

$('#chat').innerHTML(data.sticker);

使用上面的代码,发生的事情是它将替换我以前的标签,但是我不希望我以前的标签消失。

因此,然后我这样做:

$('#chat').append(data.sticker);

上面的代码所做的是..它复制了我的数据。 例如,如果我单击“贴纸1”,则显示贴纸1,第二次单击“贴纸1”时,显示3次... 1是前一个,而2是新的,则如果我第三次单击它,它显示6个stikkers ... 3是前一个,而3是新的。 有身体可以帮助吗?

我的index.html:

 function which_sticker(image){ var clickedElement; var $chat = $('#chat'); var socket = io.connect(); if(image=='1'){ clickedElement = '<img src="stickers/angry/1.png" height="90" width="90"/>'; } console.log(clickedElement); socket.emit('send sticker', clickedElement); socket.on('get sticker', function(data){ console.log(data.sticker); $('#chat').append('<span class="msg"><b><span id="name_title">' + data.nick + '</span></b><br />' + data.sticker + '<br>'); }); } 
 <img src="stickers/angry/1.png" onClick="which_sticker('1');" height="90" width="90"/> 

发生这种情况的原因是,每当用户单击元素时,便会在getsticker的套接字上一次又一次地分配事件,因此,每次单击该事件都会被多次注册,因此第一次它具有一个已注册的功能,第二次具有一个已注册的功能,然后是第二次。

在这里,您需要清除事件侦听器, 或者只在页面期间注册一次。...我已为您提供了下面的第二个示例。 我已将事件注册代码移出click事件处理程序

var socket = io.connect();

socket.on('get sticker', function(data){
  console.log(data.sticker);
  $('#chat').append('<span class="msg"><b><span id="name_title">' + data.nick + '</span></b><br />' + data.sticker + '<br>');
});

function which_sticker(image){
  var clickedElement;
  var $chat = $('#chat');

  if(image=='1'){
    clickedElement = '<img src="stickers/angry/1.png" height="90" width="90"/>';
  }
  console.log(clickedElement);
  socket.emit('send sticker', clickedElement);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM