2010-07-29 15 views
1

J'ai un problème lors de l'intégration de JQuery avec JSF.jquery avec jsf

J'utilise Spin. et j'ai dans mon code:

<script type="text/javascript" src="#{request.contextPath}/scripts/jquery.selectbox-0.5.js"></script> 
    jQuery(document).ready(function($){ 
     $.spin.imageBasePath = '../images/spin1/'; 
     $('#spin1').spin(); 
     $('#spin2').spin(); 
     $('#spin3').spin(); 
    } 

Quand j'invoque la page pour la première fois, le « spin » est ajoutée aux composants.

Le problème est que j'ai aussi, et une fois que je l'invoque et que je mets à jour une partie de la page (là où j'ai les spins) - ça ne fonctionne plus. Il semble que Jquery ne soit invoqué qu'à la lecture de la page et qu'une fois rafraîchie une partie de celui-ci - je l'exécuterais plus. J'ai essayé d'utiliser h:commandButton avec f:ajax mais cela n'a pas résolu le problème.

J'ai essayé de déplacer le script dans la forme qui est rendu, mais il ne permet pas

Comment puis-je résoudre ce problème?

+0

Comment vous mettez à jour une partie de la page? –

+0

oui. la partie sans le script. – Dejell

Répondre

1

Dans un écrou, vous souhaitez le ré-exécuter à chaque fois que la requête ajax est terminée?

le déplacer dans une fonction comme ceci:

jQuery(document).ready(function() { 
    jQuery.spin.imageBasePath = '../images/spin1/'; 
    runSpinners(); 
}); 
function runSpinners() { 
    jQuery('#spin1').spin(); 
    jQuery('#spin2').spin(); 
    jQuery('#spin3').spin(); 
} 

De cette façon, vous pouvez le réutiliser dans l'attribut oncomplete du <p:commandButton>.

<p:commandButton oncomplete="runSpinners()" /> 

Vous pouvez également utiliser <p:ajaxStatus> pour l'exécuter sur complète de tous appel ajax, quel que soit le bouton/lien pressé:

<p:ajaxStatus oncomplete="runSpinners()" /> 
+0

Merci. Mais ce n'est pas seulement ce script. J'ai aussi un lien vers un script supplémentaire: Dejell

+0

qui doit être réinitialisé Ce plugin ne fait rien pendant le chargement. Vous ne pouvez l'activer qu'en utilisant '$ (selector) .selectbox();'. Vous aimeriez ré-exécuter cela aussi. Renommez 'runSpinners()' en 'init()' et ajoutez les appels 'selectbox()'. – BalusC

+0

J'ai ajouté votre suggestion, alors maintenant tout est dans une fonction, mais je reçois: Uncaught TypeError: Impossible de lire la propriété 'spin' de indéfini – Dejell

0

Il suffit d'écrire

$ = jQuery ;

Après avoir fait cela, vous pouvez profiter de la manière standard d'écrire en utilisant jQuery signe $ ...

$(document).ready(function() { 
    $.spin.imageBasePath = '../images/spin1/'; 
    runSpinners(); 
}); 
function runSpinners() { 
    $('#spin1').spin(); 
    $('#spin2').spin(); 
} 
+0

cela ne "dos" pas la variable $ d'autres bibliothèques? Je pense que la meilleure façon de le faire est la suivante: '(function ($) {/ * du code qui utilise $ * /}) (jQuery)'. Lisez toutes les options ici: http://docs.jquery.com/Using_jQuery_with_Other_Libraries –