Третий вариант это всего лишь алиас ко второму варианту. Если выбирать между ними, то лучше использовать второй.
Первый вариант это делегирование обработки события одному из родительских контейнеров.
Тут нужно говорить о "всплытии" событий. Если у вас произошло событие "click" на каком-то элементе, то вы его сможете обработать как на самом элементе (случаи 2 и 3), так и на любом родителе (случай 1), так как это событие "всплывает", то есть вызывается на всех родителях до тех пор, пока оно не достигнет document.
Первый способ имеет смысл применять в случаях, когда в момент определения обработчиков события самого элемента, на котором будет это событие, попросту нет в DOM.