Во-первых, я бы вообще не рекомендовал использовать live
(а команда jQuery устарела).Я бы использовал delegate
(или новую версию on
) с более целевым контейнером (в вашем случае, #container
), чем документ в целом.
Если вы сделаете это, производительность во время клика будет настолько близка, что не будет иметь значения (здесь мы имеем дело с сгенерированным пользователем событием, лишняя пара лишних миллисекунд не дает никогдаум).
Однако есть и другие соображения, которые нужно рассмотреть.Предположим, у нас есть эта разметка:
<div id="container">
<div id="wrapper">
<a>A link</a>
</div>
</div>
... и этот код:
$("#container").delegate('a', 'click', function() {
// Do something with the click
console.log("Link was clicked");
});
$("#wrapper").click(function() {
return false;
});
Поскольку a
является самым глубоким элементом, можно ожидать нажатия на a
должен обрабатываться первым обработчиком и видеть запись console.log
.Но вы этого не сделаете, потому что на самом деле щелчок не обрабатывается до тех пор, пока не достигнет контейнера - и в этом случае он не достигнет контейнера, потому что промежуточный элемент оболочки останавливает событие.
Это не минус (я нахожу delegate
чрезвычайно полезным и использую его все время), это просто то, что нужно учитывать, когда вы разрабатываете, как вы справляетесь с вещами.