web-dev-qa-db-fra.com

Comment appeler une fonction dans $ (document) .déjà de l'extérieur

Comment appeler la fonction lol () depuis l'extérieur du $ (document) .ready () par exemple:

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

A tenté:

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

Et simplement:

lol();

Il doit être appelé dans un javascript extérieur comme:

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

Définissez la fonction sur l'objet fenêtre pour le rendre global à partir d'une autre étendue de fonction:

$(document).ready(function(){  
  window.lol = function(){  
    alert('lol');  
  }  
});
58
nicerobot

En dehors du bloc dans lequel cette fonction est définie, elle est hors de portée et vous ne pourrez pas l'appeler.

Il n'est cependant pas nécessaire d'y définir la fonction. Pourquoi pas simplement:

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

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

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

Vous pourriez définir la fonction globalement comme ceci:

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

Cela fonctionne mais n'est pas recommandé. Si vous souhaitez définir quelque chose dans l'espace de noms global, vous devez utiliser la première méthode.

37
cletus

Vous n'avez pas besoin et de cela - Si une fonction est définie en dehors de Document.Ready - mais vous voulez l'appeler Document.Ready - c'est comme ça que vous le faites - ces réponses m'ont conduit dans la mauvaise direction, ne le faites pas tapez à nouveau fonction, juste le nom de la fonction.

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

Où fnGetContent est ici:

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

Version courte: vous ne pouvez pas, c'est hors de portée. Définissez votre méthode comme ceci pour qu'elle soit disponible:

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

$(function(){
  lol();
});
2
Nick Craver

Qu'en est-il du cas où Prototype est installé avec jQuery et où nous avons défini des non-conflits pour jQuery?

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

Maintenant, nous pouvons appeler lol de n'importe où, mais avons-nous introduit un conflit avec Prototype?

0
Bob Brunius