page - jquery ready vs load
jquery-función dentro de $(documento).función (7)
¿Es correcto crear funciones dentro de
$(document).ready(function() {
al igual que :
$(document).ready(function() {
function callMe() {
}
});
La función dentro de .ready()
no tiene que llamar antes de que dom esté listo y el evento dentro de ready()
se active.
Solo para aclarar un poco, aquí está el código que ilustraría el problema:
$(function() {
var ind = 0;
// some event is executed and changes the value of the ind
// another event which affects the ind variable
// and another one - after this event we call our function
// there''s another event - and we call our function again
La función a la que necesito llamar necesita el valor actualizado de la variable ind
, que creo que podría pasar como parámetro, pero ¿hay una mejor manera de hacerlo?
Además, otra cosa importante es que la function()
en cuestión también puede cambiar el valor de la variable ind
, por ejemplo incrementándola ( ind++
).
Cuando crea una función dentro de $(document).ready
, se garantiza que no se llamará antes de que el documento se haya cargado. Por supuesto, solo se puede llamar desde ese controlador de eventos (en algún lugar más adelante en el controlador de eventos).
En otras palabras, lo que está tratando de hacer es válido (aunque no necesariamente deseable, tendría que revelar más sobre lo que está tratando de lograr).
Esto es definitivamente legal. La pregunta es ¿por qué quieres hacerlo? Probablemente para enlazar el alcance de la función con el de listo y no tenerlo globalmente vinculado al objeto de la ventana. ¿Pero es eso lo que realmente quieres? Sugiero echar un vistazo a los cierres de funciones en javascript y cómo controla el alcance. para ayudar a aclarar la necesidad de que ...
Esto también funcionará.
$(document).ready(function() {
callMe = function() {
alert(''hello'');
}
});
callMe();
Si utiliza
var callMe = function () { ... }
Puede que no funcione y puede aparecer un error "la función no está definida"
Probablemente sea una mejor idea llamar la función directamente así:
$(document).ready(myFunction);
function myFunction() {
// Your code here
}
Puedes hacer así:
$(document).ready(function(){
var callMe = function(){
//enter code here
}
$(".my-class").on("click", function(){
callMe();
});
});
Por lo tanto, no necesita poner la función fuera del documento lista y el código se agrupa y se organiza más. ;)
Sí, puedes hacer eso, es solo una cuestión de alcance; si solo necesita acceder a callMe()
desde $(document).ready(function() { })
, está bien colocar la función allí y ofrece algunos beneficios de arquitectura porque no puede acceder a la función fuera de eso. contexto. Sin embargo, si necesita usar la función callMe () fuera del documento, debe definir la función callMe () fuera de ese contexto.
function callMe() {
// Do Something
}
$(document).ready(function() {
callMe();
});
ACTUALIZAR
Basado en su aclaración, tiene dos opciones:
1) DECLARAR la variable fuera de ready (), pero luego definir la variable dentro de ready ()
var someVariable;
function callMe() {
someVariable++;
alert(someVariable);
}
$(document).ready(function() {
someVariable = 3;
callMe(); // Should display ''4''
});
2) Dentro de listo, defina variables usando window.yourVariable = ''whatever'';
Vea si puede eliminar la necesidad de usar document.ready moviendo su etiqueta a la parte inferior del archivo html. Esto debería hacer las cosas mucho más simples. De lo contrario, declare la función fuera del alcance del documento. Listo y simplemente llámelo en el alcance de la función documento.