2010-07-21 15 views
1

Mesdames et messieurs,Rafraîchissant CRM page Causes jQuery/Javascript Erreur

J'ai une page de CRM qui fait référence à 3 fichiers js, (1x jQuery, 2x) personnalisés tous stockés dans le Crminstall/ISV/dossier.

Sur la méthode OnLoad de formulaire, je charge chacun d'eux, puis je l'utilise pour étendre/personnaliser l'interface utilisateur. Mon inexpérience avec jQuery est évidemment manifeste!

Le code OnLoad est ci-dessous:

//jquery 
var url = "/isv/jquery-1.4.2.js"; 
var scriptElement = document.createElement("<script src='" + url + "' language='javascript'>"); 
document.getElementsByTagName("head")[0].insertAdjacentElement("beforeEnd", scriptElement); 


$(document).ready(function() 
{ 
$.getScript("/isv/common.js", function() 
{ 
    $.getScript("/isv/account.js", function() 
    { 
    $(document).ready(function() 
    { 
    SetUpAccountForm();//call to account.js 
    }); 
    }); 
}); 
}); 

Et cela provoque les actions suivantes (en utilisant IE8):
Première chargement de la page (pas de fichiers dans le dossier des fichiers temporaires Internet)

  • d'erreur lorsque frapper le $ (document) .ready (function() {})

charge deuxième page (tous les fichiers maintenant dans le dossier des fichiers temporaires Internet)

  • page/charges fonctions fines

appuyez sur F5 (refresh)

  • erreur lors de frapper le $ (document) .ready (function() { })

Où est-ce que je vais mal? Est-ce parce que j'ajoute deux fois une référence au script jQuery?

Dans les deux cas, l'erreur se lit comme suit:

There was an error with this field's customized event.
Field:window
Event:onload
Error:Object expected

Répondre

2

Je pense que le problème est que le temps que vous appuyez sur le $ (document) fonction .ready la première fois, Jquery n'a pas complètement chargé ... L'insertion de la balise de script ne signifie pas que le script est immédiatement prêt à l'emploi ...

La deuxième fois que vous le chargez, les fichiers js sont déjà dans le cache, donc le chargement est beaucoup plus rapide, mais quand vous frappez F5, il charge tout depuis le serveur et vous êtes de retour au premier cas.

vous pouvez résoudre ce problème en attachant une fonction à l'événement onload du nœud de script qui vous insérez:

var url = "http://code.jquery.com/jquery-1.4.2.min.js"; 

var head = document.getElementsByTagName("head")[0];   
var scriptNode = document.createElement('script'); 
scriptNode.type = 'text/javascript'; 
scriptNode.src = url; 
scriptNode.onload = jQueryLoaded; 
head.appendChild(scriptNode); 


function jQueryLoaded() 
{ 
    $(document).ready(function() { 
     $("#some").text("Jquery loaded!!") 
    }); 
} 
+0

Je vais essayer quand je serai de retour au bureau demain, mais ça sonne bien, merci pour l'exemple de code! – glosrob

+0

A travaillé parfaitement, merci – glosrob

0

Ajouter jquery comme WebResource, enveloppez votre code (une autre ressource Web) à l'intérieur d'un natif Fonction JavaScript et ajoutez un événement pour l'appel Form OnLoad cette fonction. N'oubliez pas de placer jquerywebresource avant le code personnalisé. voir l'exemple here.