jQuery .prêt() pour formulaire infopath?
J'ai un formulaire infopath que je veux modifier via jQuery. Le seul problème est qu'il se charge une fois que les pages DOM, afin de jQuery standard $(document).ready(handler);
ne marchera pas ici. Ma question est est-il un moyen de tirer un $(infopath).ready(handler);
d'une certaine sorte, ou un moyen de peut-être attendre pour le formulaire infopath pour faire le chargement, sans l'aide d'un standard setTimeout()
.
EDIT 1: Si vous avez plus d'informations, le jQuery est à l'intérieur d'un composant webpart Éditeur de Contenu (CEWP), et le formulaire Infopath est dans un Formulaire Infopath composant webpart Visionneuse de.
Je sais à l'aide de jQuery ou javascript avec infopath n'est pas une pratique courante, il est malheureusement nécessaire dans cette situation en raison de la non-idéal de fonctionnalités à partir d'infopath répété option contrôle, discuté plus loin dans cette question.
EDIT 2: De ce que je peux dire, et je peux très bien avoir tort, sharepoint est un fichier js appelé core.js il semble que la fonctionnalité de chargement, via AJAX, un formulaire infopath dans la page. Est-il possible que je peux configurer une fonction jQuery à agir après une télécommande fichier javascript fin de l'exécution?
- Est la forme de la visionneuse de l'aide d'un iframe?
- Non, je le souhaite, je pense que c'est à l'aide de code javascript. C'est très sournois sharepoint back-end javascript comme. (Si vous le code de n'importe quel montant de javascript avec sharepoint, vous comprenez ce que je veux dire). Si je ne peux pas obtenir une bonne réponse ici, je vais probablement être de gauche ramper à travers le code de réponse pour que les scripts sont chargés, puis l'analyse par l'intermédiaire de ce code pour voir si il y a quelque chose que je peux piggy back sur.
- Je ressens votre douleur. Pas avec infopath en particulier, mais de sharepoint en général. Si c'est du javascript alors vous ne pouvez pas trouver une réponse facile. Ma seule pensée a été de vérifier à chaque seconde, pour un élément donné sur la page qui indique que c'est chargé, mais c'est un peu laid.
- Comment est le formulaire infopath être chargé après le DOM est chargé, en particulier? Par le biais d'autres JS? Est-il jQuery?
- ne infopath utilise jQuery?? Vous pouvez pirater $.ajax si core.js dépend de jQuery. si non pourriez me donner un lien où je peux voir ce core.js et vous dire comment pirater.
Vous devez vous connecter pour publier un commentaire.
Essayer comme ceci:
Dans FormServer.aspx, juste au-dessus </body>, mettez ceci:
Ma réponse ici:
Comment vérifier si le formulaire InfoPath a été chargé (en javascript)
Il ya une meilleure façon, en fonction de votre contexte. Mon exigence est d'intercepter le
click
gestionnaire sur mon formulaire InfoPath Enregistrer bouton et faire un peu plus que la validation est difficile à faire dans InfoPath. Comme la question des états, il n'est pas possible d'utiliser la normale jQuery$()
fonction directement, parce que la forme n'est pas chargé à ce point.Il y a un solution de contournement. SharePoint fournit un tableau JavaScript
_spBodyOnLoadFunctionNames
et l'initialisation des fonctions peuvent être ajoutées à ce tableau. En poussant une fonction sur le tableau, il sera appelé après le formulaire InfoPath est chargé:La raison pour laquelle je suis en utilisant
$(document).on('focusin', function(event){...
est parce que les publications de la forme (par exemple, lorsque le formulaire s'affiche l'Envoi des données au serveur...) entraînera une actualisation de la forme et de tout lié gestionnaires seront supprimés. À l'aide de jQuery$(document).on('focusin',...)
méthode résout ce problème et à l'aide de lafocusin
événement permet à la touche originale de cliquez sur gestionnaire doit être supprimé et le nouveau re-joint.J'ai fini par utiliser une minuterie qui vérifie si une étiquette sur le formulaire InfoPath a montré dans les DOM:
_spBodyOnLoadFunctionNames
tableau à exécuter javascript une fois que le formulaire est entièrement chargé.Je ne sais pas si c'est votre problème ou pas, mais si les choses sont toujours en cours de chargement après le $(document).prêt de fonction, essayez de l' $(window).la fonction de charge. Ce un est déclenché après l'ensemble de vos bibliothèques, des images, des styles, et d'autres choses ont fini de charger.
Avez-vous regardé XDocument.Onload Événement?
Selon les docs de l'API, cela se produit "après un formulaire Microsoft Office InfoPath 2007 a été chargé, mais avant tout des points de vue ont été initialisé".
Aussi, jetez un oeil à ce post qui parle de l'ajout de votre
onLoad
gestionnaire de SharePointonLoad
processus.onload
crochet? Aucune chance avec ça?Si la conclusion d'un crochet dans infopath (quel qu'il soit) code ne fonctionne pas, vous pouvez la force brute de générer un vous-même. Écrire une fonction qui vérifie la condition d'une certaine manière à l'aide de jQuery, et soit déclenche l'événement ou le reporte lui-même à courir à nouveau dans 200 ms.
Puis rédigez votre gestionnaire d'événement de la manière habituelle. Si jamais vous trouvez une meilleure façon, vous avez juste besoin de remplacer la première partie.
J'ai une idée mais pas le temps de l'essayer. Comment détecter les XDocument.OnLoad dans jscript et jscript met une valeur dans la face cachée d'entrée. Et puis javascript qui détecte l'événement. Je pense qu'il va travailler dans IE mais peut-être pas dans les autres navigateurs.