Up until now I just put all my jQuery goodness inside the $(document).ready()
function, including simple functions used in certain user interactions.
But functions that don´t require the DOM document to be loaded or are only called afterwards anyway, can be placed outside the $(document).ready()
as well. Consider for example a very simple validation function such as:
function hexvalidate(color) {
// Validates 3-digit or 6-digit hex color codes
var reg = /^(#)?([0-9a-fA-F]{3})([0-9a-fA-F]{3})?$/;
return reg.test(color);
}
The function is only called from within the $(document).ready()
function though.
What is best practice (syntax, speed); placing such a function inside or outside the jquery document ready function?
Yes, you can do that, it's just a matter of scope. If you only need to access callMe() from within $(document). ready(function() { }) , then it's fine to put the function there, and offers some architecture benefits because you can't access the function outside of that context.
$( document ). ready() A page can't be manipulated safely until the document is "ready." jQuery detects this state of readiness for you. Code included inside $( document ). ready() will only run once the page Document Object Model (DOM) is ready for JavaScript code to execute. Code included inside $( window ).
There is no difference in functionality between your examples - they both bind to DOM ready. For reference, there are two points at which you can bind your jQuery code. The first will execute when the DOM is ready (both are equivalent): // full example $(document).
A simple solution for anyone learning jQuery is to always declare your jQuery code inside the document ready function. This is to ensure that all of the html page elements also known as the DOM (Document Object Model) have loaded before any jQuery code is run.
Put it inside so it won't pollute the global namespace. It also ensures a faster resolve of the function name because of JavaScript's scope chains.
Put it outside if it's a reusable component so you could easily move it in a separate file and call from different contexts.
Since you already use JQuery, it's worth mentioning, that in your case you may want to define hexvalidate
as a JQuery plugin outside and then invoke it inside.
I don't think you should be using any 'just functions' in the first place. In OOP javascript a "function" usually belongs to one of four distinct types:
e.g.
(function() { <- init closure
function helper1() { <- utility }
globalSomething = {
foobar: function() { <- method
xyz.replace(/.../, function() { <- constant })
}
}
)()
In your example, 'hexvalidate' is obviously a part of Validator object, which, in turn, can be made a jQuery plugin:
(function($) {
$.validate = {
hexColor: function(color) { ... your code }
more validators...
}
)(jQuery)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With