Fix RemoveEventDispatch using wrong index in multi-listener branch (#7796)
The outer loop binds `i` as the index into the `ids` array and derives the dispatch key as `id = ids[i]`. The single-listener cleanup branch correctly uses `id`, but the multi-listener branch indexed `obj.eventsDispatch[i]` instead of `obj.eventsDispatch[id]`. `obj.eventsDispatch[i]` is undefined (`i` is "0", "1", ...), so the inner `for...in` iterates zero times, `newList` stays empty, and the final assignment writes the empty array to a bogus numeric key. The real `obj.eventsDispatch[id]` array is left untouched, so the target that was supposed to be removed keeps receiving events. Bogus numeric keys also accumulate over time. Single-listener case (`length == 1`, `delete obj.eventsDispatch[id]`) was already correct, so the bug only triggers when two or more callers have subscribed to the same dispatch id. The sibling `RemoveAllEventDispatch` is not affected -- its outer loop already binds `i` to the dispatch key.