Is binding a click event to document better than binding it to body?
The question is simply between
$("body").click(function(e){});
vs $(document).click(function(e){});
which is more efficient or advis开发者_Go百科able? Or does it depend on the situation?
Honestly I have used them both interchangeably and haven't seen any differences until I got curious and asked this question here.
If the page height is smaller than the viewport height, then clicking on the viewport below the page will not trigger the 'body'
click handler, but only the document
click handler.
Live demo: http://jsfiddle.net/simevidas/ZVgDC/
In the demo, try clicking on the area below the text, and you will see that only the document
click handler executes.
Therefore, it is better to bind the handler to the Document object.
Binding it to document
seems to be the standard practice, so I would stick with that.
document
is also much faster.
I would say it's better to bind event to document as in some cases in some browsers body may be missing.
Also the body might not cover the whole visible window (some crazy styles cause that)! I don't know if you would still get the click event in this case. So better bind it to document
.
I'd treat this similarly to anything else in the DOM.
If I bind to a <table>
then it's at a higher level than the <tr>
inside it. If I bind to the <tr>
then it's lower than the <table>
. This works the same way for the document(higher) and the <body>
(lower) simply a level issue in my opinion.
So if you want to ensure that you're binding the click event to the highest element then bind to the document.
精彩评论