What you see is the distribution, the event bubble in the DOM, so when you click on your checkbox, it actually fires the click event on the #container (as well as any events that you might have associated with the input or other parent elements).
Using return false, as this is ambiguous, because it does three things at once, when you most likely want it to be done. It prevents default functionality, stops distribution, and stops further execution.
It is best practice to be specific and use methods from the event object to prevent the default action or stop bubbling.
event.preventDefault () will stop actions such as loading href from a snap click, stopping the check box from checking, etc.
event.stopPropagation () cancels the distribution, this is useful for situations like your example - http://jsfiddle.net/4ncaq/1/
Another problem with return false is that it cannot be executed, a common error that I see people doing in jQuery has a click event anchored with the request $ .ajax (), followed by return false to stop browser from loading the linked page. In this case, if there is an error emanating from ajax () (not a response error, a jQuery error is usually a parameter with an error or something else), it will never hit return false; and the browser will load the linked page. Using e.preventDefault () completely fixes this problem.
source share