То, что вы видите, - это распространение, события «всплывают» в DOM, поэтому, когда вы нажимаете флажок, он фактически запускает событие click на #container (а также любые события, которые вы могли связать с входом или другим родителем). элементы).
Использование return false как это неоднозначно, потому что он делает 3 вещи одновременно, когда вы, скорее всего, хотите, чтобы он делал только одно. Это предотвращает функциональность по умолчанию, останавливает распространение и останавливает дальнейшее выполнение.
Лучше быть точным и использовать методы из объекта события, чтобы предотвратить действие по умолчанию или прекратить пузыри.
event.preventDefault () остановит такие вещи, как загрузка href от щелчка якоря, остановка проверки флажка и т. Д.
event.stopPropagation () отменит распространение, это полезно для ситуаций, подобных вашему примеру - http://jsfiddle.net/4ncaq/1/
Другая проблема, связанная с возвратом false, заключается в том, что он может быть не выполнен. Распространенная ошибка, которую, как я вижу, люди делают в jQuery, - это событие click на привязке с запросом $ .ajax (), за которым следует return false, чтобы остановить браузер. от загрузки связанной страницы. В этом случае, если есть ошибка, исходящая от ajax () (не ошибка ответа, ошибка jQuery - обычно параметр с ошибкой или что-то в этом роде), он никогда не нажмет return false; и браузер загрузит связанную страницу. Использование e.preventDefault () полностью устраняет эту проблему.