Кит прав, что его решение работает из-за разницы между работой live () и bind ().
bind () присоединяет ваш обработчик событий ко всем элементам DOM в объекте jQuery, к которому он вызывается. live () присоединяет обработчик события из jQuery к «контексту события» (дополнительную информацию ищите http://api.jquery.com/live). По умолчанию это корень дерева DOM. Этот обработчик событий отслеживает события, которые заполняют (или распространяются) объекты DOM внутри объекта, с которым он связан. Когда он его перехватывает, он смотрит, что вызвало событие, и, если он совпадает с селектором объекта jQuery, к которому был применен live (), он запускает аргумент функции, который вы указали в качестве обработчика события.
Это означает, что если у вас есть контейнер (в данном примере это «# project-wrap») и вы привязываетесь к его событию click, вы, как правило, будете получать клики, происходящие из чего-либо внутри этого контейнера, поскольку они будут пузыриться до контейнер. Но если вы связываете событие с контейнером с помощью live (), вы будете получать только те клики, которые произошли из самого этого контейнера, т. Е. Щелчки из пустого пространства внутри контейнера, а не клики по содержимому внутри него.