better event binding and bubbling