resolved #164: `remove()` will detach all events, don't need `off()`