Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
✓ ANSWER ACCEPTED

How do I turn off an event listener?

The question is basically my problem. I am wondering how I can turn off an event listener but without using a debounce. Can someone help me out here? I just need a link or suggestion on how to do this I don't need you to write me a script. Any help would appreciated. Thanks!

3 answers

✓ Accepted answer

Connect returns a signal connection object that allows you to disconnect the listener from the event. You can do this by calling Disconnect on the object

Example

local connection = object.Event:Connect(f)
connection:Disconnect()

Some people create their own APIs for binding events to manage Disconnect better, or just because they don't like using ROBLOX's API. There's no method in the ROBLOX API for disconnecting all listeners from an event, so often you'll see people do something like this...

local EventSignal = {}

local function connectSignal(self, func)
	local connections = self.connections
	local signal = self.bindable.Event:Connect(func)
	connections[#connections + 1] = signal -- add signal to connections
	return -- return some disconnector
end

local function disconnectAll(self)
	local connections = self.connections
	for i = 1, #connections do
		connections[i]:Disconnect() -- disconnect roblox event signal
		connections[i] = nil
	end
end

function EventSignal.new()
	local signal = {}
	local bindable = Instance.new("BindableEvent") -- ref to roblox api
	signal.connections = {}
	signal.bindable = bindable
	signal.Connect = connectSignal
	signal.DisconnectAll = disconnectAll

	setmetatable(signal, { __index = bindable })
	return signal
end

It's not perfect but that's just meant to show you how it can make life while programming a little bit easier if you're managing a lot of events.

1 comment

0

Thank you!

You can "disconnect" your Event in various ways.

  1. http://wiki.roblox.com/index.php?title=Destroy_(Method) You can destroy the Event to disconnect it fully, even though you won't be able to use it back again. (Even though you can add a new instance with the same properties as the old Event.

  2. Using :Disconnect() in the event. Here's an example:

-- "PartTouched" is now a identifier for what ":Connect()" returns, which is the event signal for this event.

local PartTouched = Part.Touched:Connect(function()
	print("Part touched")
end)

-- You can use the :Disconnect() method in the event you made a variable with.
PartTouched:disconnect()

1 comment

1

You cannot "destroy the event". RBXScriptConnection can't be used with Destroy(). I think you meant destroying an object disconnects all of its events. But that's still a bad way to disconnect events, since that's what Disconnect() is for. Also, you wrote "disconnect()" instead of "Disconnect()" on the last line ;p

This discussion is preserved as it was. New answers, comments, and votes are closed.