如何防止使用jquery和socket.io添加多个事件侦听器

时间:2015-01-18 21:06:10

标签: javascript jquery socket.io

我有一个在$(' .message-input')上设置听众的功能

function addEasterEgg(room){
  $('.message-input').on('focus', function(event) {
    event.preventDefault();
    console.log('room', room)
    if (room.length === 1) {
      displayStatus("No-one's there!!")
    };
  });
}

它在事件roomStatus上调用。

socket.on('roomStatus', function(room){
  addEasterEgg(room);
});

每次有人加入房间时都会触发roomStatus事件。因此,如果房间首先有一个人,它会被触发并且房间= [" Zf17x3UsNUdgMJ3UAAAD"]然后当另一个人加入时,它再次被触发并且房间= [" Zf17x3UsNUdgMJ3UAAAD",&# 34; ksxzbQhe0GuZqhMyAAAE"]

所以关注焦点'事件,我得到两个console.logs(每个房间值一个)和room.length总是等于1,即使它已经变为2

我相信它是因为我的方法被调用两次意味着添加了2个侦听器。如果那是对的,那么当下次调用roomStatus并调用addEasterEgg时,我该如何管理删除前一个侦听器?

由于

1 个答案:

答案 0 :(得分:5)

我找到了修复程序。它看起来确实是在向

添加多个事件监听器
$('.message-input')

所以在添加修复它之前,只需删除任何剩余的事件侦听器

$('.message-input').off('focus')

添加到:

function addEasterEgg(room){
  $('.message-input').on('focus', function(event) {
    event.preventDefault();
    console.log('room', room)
    if (room.length === 1) {
      displayStatus("No-one's there!!")
    };
  });
}