2010-03-04 25 views
26

¿Cómo se llama a la función lol() desde fuera del ready $ (document)(), por ejemplo:

$(document).ready(function(){ 
    function lol(){ 
    alert('lol'); 
    } 
}); 

intentado:

$(document).ready(function(){ 
    lol(); 
}); 

y simplemente:

lol(); 

debe ser llamado dentro de un javascript exterior como:

function dostuff(url){ 
    lol(); // call the function lol() thats inside the $(document).ready() 
} 

Respuesta

48

definir la función en el objeto de la ventana para que sea global desde dentro de otro ámbito de la función:

$(document).ready(function(){ 
    window.lol = function(){ 
    alert('lol'); 
    } 
}); 
+0

esta solución simple funciona para mí –

+1

¡Esta es una GRAN solución, me ha ahorrado horas! – Oritm

+0

De todas las respuestas confusas o complejas que he encontrado, esto es lo único que funcionó para mí. – jyoseph

37

Fuera del bloque en el que se define la función, está fuera del alcance y no podrá llamarlo.

Sin embargo, no hay necesidad de definir la función allí. ¿Por qué no simplemente:

function lol() { 
    alert("lol"); 
} 

$(function() { 
    lol(); //works 
}); 

function dostuff(url) { 
    lol(); // also works 
} 

Usted podría definir la función global de esta manera:

$(function() { 
    lol = function() { 
    alert("lol"); 
    }; 
}); 
$(function() { 
    lol(); 
}); 

que funciona pero no se recomienda. Si va a definir algo en el espacio de nombres global, debe usar el primer método.

+1

Creo que cuando se trata de definir la función global desde dentro del segundo ejemplo, para evitar la ambigüedad que podría utilizar esto: 'ventana [ 'lol'] = function () {/ * cuerpo de la función * /}; '. – Tadeck

+0

http://api.jquery.com/ready/ –

+0

verrrrrrrrrrrry goooooooooooooood este – ashkufaraz

3

Versión corta: no se puede, está fuera del alcance. Definir su método como este para que esté disponible:

function lol(){ 
    alert('lol'); 
} 

$(function(){ 
    lol(); 
}); 
0

¿Qué pasa con el caso en el prototipo se instala con jQuery y no tenemos ningún conflicto establecido para jQuery?

jQuery(document).ready(function($){ 
    window.lol = function(){ 
      $.('#funnyThat').html("LOL"); 
    } 
}); 

Ahora podemos llamar a lol desde cualquier lugar, pero ¿hemos introducido un conflicto con Prototype?

3

No necesita y de eso - Si una función está definida fuera de Document.Ready - pero desea llamarla Document.Ready - así es como lo hace - estas respuestas me llevaron en la dirección incorrecta , no vuelva a escribir la función, solo el nombre de la función.

 $(document).ready(function() { 
    fnGetContent(); 
     }); 

Dónde fnGetContent está aquí:

 function fnGetContent(keyword) { 
      var NewKeyword = keyword.tag; 
      var type = keyword.type; 
      $.ajax({ ....... 
+3

Esto está respondiendo al contrario de la pregunta real, pero no downvoted ya que todavía es de alguna manera útil para quienes lo buscan. – Michael

+0

Bajé la votación porque no responde la pregunta – bonez

Cuestiones relacionadas