2010-12-15 49 views
1

Je voudrais conditionnellement charger un ensemble de fonctions javascript (qui impliquent jQuery) sur une page donnée. La situation est que notre site a un tas de choses qui se passe sur $(document).ready (la plupart du temps configuration de menu de fantaisie et quelques manipulations de classe CSS), mais une ou deux pages ont besoin de plus d'installation. C'est assez de code (et assez spécifique) que je ne veux pas juste jeter dans le fichier principal, mais plutôt le charger juste sur ces pages spécifiques.Parfois, le chargement de JavaScript

Il semble que je ne peux pas le faire en tout le chargement d'un nouveau fichier specific.js dans ces pages qui contient

(function() { 
    $(something).click(function() { Stuff(happens); }); 
    something(Else); 
    ... 
}()); 

Dans l'exemple ci-dessus something(Else);, fonctionne très bien, mais .click et .bind ne semblent pas faire n'importe quoi. Ce que je fini par faire est

function specificStuff() { 
    $(something).click(function() { Stuff(happens); }); 
    something(Else); 
    ... 
}; 

et en ajoutant if(specificStuff) specificStuff(); au fichier principal js. Cela fonctionne, mais il semble qu'il devrait y avoir une meilleure façon d'accomplir ceci (idéalement, celle qui garderait tous les changements dans specific.js et ne pas toucher les paramètres généraux).

Existe-t-il une méthode canonique de chargement conditionnel du code js pour qu'il s'exécute en document.ready?

Répondre

2

Vous pouvez appeler $(document).ready(); plusieurs fois dans une page Web/fichier de script. Il suffit de l'envelopper vos fixations jquery en tant que tels dans votre fichier specific.js:

$(document).ready(function(){ $(something).click(function() { Stuff(happens); }); something(Else);});

+0

Wow. Je pensais sérieusement à cela. – Inaimathi

0

Vous pouvez charger le Javascript spécifique à la page dans le html de ces pages, chaque script avec sa propre fonction document.ready.

0

essayer de retirer le() lors du passage d'une fonction à document.ready:

(function() { 
    $(something).click(function() { Stuff(happens); }); 
    something(Else); 
    ... 
} **()**); 

avec le(), il exécutera tout de suite et ne pas attendre que le document soit prêt.

0

Vous pouvez appeler la fonction de préparation de document jquery autant de fois que vous le souhaitez. Je pense que votre problème est lié à la façon dont vous avez configuré votre fonction. Si vous essayez d'appeler la fonction prêt, il devrait ressembler à ceci:

$(function() { 
    $(something).click(function() { Stuff(happens); }); 
    something(Else); 
    ... 
}); 

En outre, si les something éléments sont créés par votre fichier main.js, vous devez l'inclure avant votre specific.js fichier.