2010-04-27 4 views
0

Situation: J'envoie une requête ajax qui renvoie le code HTML contenant les éléments nécessitant des gestionnaires d'événements. Le code qui définit les gestionnaires pour ces éléments est contenu dans un fichier javascript distinct.Chargement de javascripts dans les rappels ajax

J'ai utilisé le code suivant pour charger les fichiers js requis lors du rappel en scriptant la balise <head>. Je n'ai pas eu de problèmes jusqu'à présent, mais je me demandais si c'est une approche sûre et fiable (en particulier cross-navigateur).

function ajax_callback(response) { 
    document.getElementById('dom_id_to_update').innerHTML = response; 
    import_js('/path/to/js/file/'); 
} 

function import_js(src) { 
    var scriptElem = document.createElement('script'); 
    scriptElem.setAttribute('src',src); 
    scriptElem.setAttribute('type','text/javascript'); 
    document.getElementsByTagName('head')[0].appendChild(scriptElem); 
} 

Merci, Brian

Répondre

1

Eh oui. Vous pouvez même supprimer l'élément script immédiatement après l'avoir ajouté (bien que vous souhaitiez le conserver pour éviter de le recharger ultérieurement   —, par exemple, en examinant les balises script dans head); Apparemment, le simple fait de l'ajouter est tout ce qui est nécessaire pour obtenir le code chargé et analysé. More here (cette page provient du wiki Prototype non officiel, mais elle s'applique, que vous utilisiez Prototype).

1

Il ne semble pas que vous utilisiez jQuery, ce qui est trop grave, car il existe une fonction, live, qui traite spécifiquement de ce cas. La fonction live attache un gestionnaire à tous les éléments qui correspondent au sélecteur maintenant et dans le futur. Ainsi, peu importe quand vos nouveaux éléments sont ajoutés à la page, le gestionnaire sera automatiquement attaché, sans avoir à charger de nouveaux scripts.

Vous pouvez voir la documentation et des exemples ici: http://api.jquery.com/live/

+0

Ils auraient * un gestionnaire * attaché, mais sans doute pas le * droit * un. Je suppose qu'il a une * raison * qu'il doit charger un script externe, plutôt que de simplement référencer des fonctions dans son script existant comme il le ferait avec 'live' (ou toute autre forme de délégation d'événement, ce n'est pas propre à jQuery) . –

Questions connexes