[résolu] Réécriture d'URL : souci de script jQuery

TomekTomek Member
août 2013 modifié dans Entraide
Bonjour,

J'ai mis en place un script jQuery très simple pour afficher différents blocs en cliquant sur des liens (non sans avoir au préalable mis en place la lib. jQuery). Voici le script en question :
[== Indéfini ==]
$(document).ready(function(){

    $(".tabContent").each(function(i){
        this.id = "#" + this.id;
    });

    $(".tabContent").not(":first").hide();

    $("#tabmenu a").click(function() {
        var idTab = $(this).attr("href");
        $(".tabContent").hide();
        $("div[id='" + idTab + "']").fadeIn();
        return false;
    });    

});
Sans activer la réécriture d'URL, ce script fonctionne sans souci. Dès que j'active et recharge la page avec la bonne URL, le 1er bloc par défaut s'affiche, si je clique pour visualiser les autres blocs, ils ne s'affichent pas. De quoi cela peut-il provenir ? Merci !

Réponses

  • Bonjour Tomek,
    Faut modifier ton appel d'encre avec la fonction de réécriture, a savoir:
    [== JavaScript ==]
    $(document).ready(function(){
    
        $(".tabContent").each(function(i){
            this.id = "#" + this.id;
        });
    
        $(".tabContent").not(":first").hide();
    
        $("<?php $plxShow->urlRewrite('#tabmenu a') ?>" />").click(function() {
            var idTab = $(this).attr("href");
            $(".tabContent").hide();
            $("div[id='" + idTab + "']").fadeIn();
            return false;
        });    
    
    });
    

    Il faut que ce script soit entre les balises <script> dans ton template.
  • TomekTomek Member
    Merci Frédéric, j'ai testé, mais du coup le script ne fonctionne plus, le contenu des différents blocs est visible tout le temps. Doit y avoir un souci quelque part (oui, je cherche aussi ;) ).
  • Je pense que tu fais erreur Frédéric. Le script ne cible pas une ancre mais un id.
    Vérifie l'adresse de jquery dans ton code. Le site est-il en ligne (ou une démo) pour qu'on puisse plus facilement t'aider ? Que dit la console javascript ?
  • Exacte Jerry Wham,

    Pour le coup je lui est proposé une solution en css pour afficher/cacher un div, a voir s'il l'a fait.
    J'avais le même problème que lui donc le code doit avoir une coquille quelque part mais je vois pas ou :)
  • TomekTomek Member
    Hello Jerry,

    L'appel à jQuery est ok, pas de souci là-dessus.
    La console ne dit hélas rien.

    Je t'envoie le lien par email (site non ouvert encore)
  • Il y a une erreur dans les balises fermantes </figcation> au lieu de </figcaption>. Peut-être que ça vient de là (le DOM est très sévère parfois...).
  • PS: nickel ton site au passage. Chapo...
    Essaie de mettre ça :
    $(".tabContent").children().not(":first").click(function() {...
    
  • TomekTomek Member
    Jerry Wham a écrit:
    Il y a une erreur dans les balises fermantes </figcation> au lieu de </figcaption>. Peut-être que ça vient de là (le DOM est très sévère parfois...).
    Oh b***** ! Le con je fais. En plus j'avais vu l'alerte dans le code source...

    Bon sinon j'ai testé le code que tu as fourni, ça ne fonctionne pas plus, hélas. Merci pour le coup de main !
  • TomekTomek Member
    C'est un truc que je trouve étrange tout de même : ce script fonctionne nickel sur les autres CMS que j'utilise (et ce même en Rewrite URL)... c'est donc dû à PluXml, non ?
  • StéphaneStéphane Member, Former PluXml Project Manager
    Bonjour Tomek
    Peux-tu stp m'envoyer un lien pour que je puisse regarder ?

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • TomekTomek Member
    Grâce à Stéphane que je remercie beaucoup d'avoir pris le temps de regarder et de trouver la solution, voici donc le script qui fonctionne :
    [== JavaScript ==]
    <script type="text/javascript">$(document).ready(function(){
    
        $(".tabContent").each(function(i){
            this.id = "#" + this.id;
        });
    
        $(".tabContent").not(":first").hide();
    
        $("#tabmenu a").click(function() {
            var idTab = $(this).attr("href");
    var n=idTab.indexOf("#");
    var m=idTab.substring(n);
            $(".tabContent").hide();
            $("div[id='" + m + "']").fadeIn();
            return false;
        });    
    
    });</script>
    
  • Bien vu l'aveugle. Il fallait enlever le # dans l'appel de l'attribut id de la div, c'est bien ça ?
  • StéphaneStéphane Member, Former PluXml Project Manager
    le contenu des id des menus est de la forme id="#val1"
    la réécriture d'url vient modifier les id à cause du # pour donner: id="http://monsite.com/page.php#val1";
    pour que le jquery fonctionne il faut nettoyer le contenu de l'id pour retrouver: #val1
    c'est un effet de bord du fonctionnement de la réécriture d'url de PluXml

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • Rhaaa je me disais bien 'Tien encore un cas pour le rewrite de pluxml' !!!
    M'enfin pour ce genre de chose ca ce fait aisément en css ;)
  • cfdevcfdev Member
    Salut,
    je me suis bien servi de ce post pour résoudre le soucis de Jquery avec la réécriture d'url seulement comme je suis débutant dans la matière, j'ai un soucis:
    voici mon code
    [== JavaScript ==]
    	// Event sur click d'un lien de la section footer
    	$("footer a").click(function(e) {
    		e.preventDefault();
    		
    		// Isole l'ancre id
    		var idTab = $(this).attr("href");
    		var n=idTab.indexOf("#");
    		var m=idTab.substring(n);
    		
    		//Tests du lien
    		//pour agir sur le scrolling		
    		if(m === "#top"){
    			var target = this.hash,
    			$target = $(target);
    
    			$('html, body').stop().animate({
    				'scrollTop': $target.offset().top
    			}, 900, 'swing', function () {
    				window.location.hash = target;
    			});
    		}
        });
    

    ça fonctionne super mais du coup tout les liens de la section footer ne fonctionne plus... surement un soucis d’événement ?
    un petit coup de main ?
  • StéphaneStéphane Member, Former PluXml Project Manager
    @cfdev: tu cherches à faire quoi avec ton code ?

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • cfdevcfdev Member
    Je cherche à faire bouger l’ascenseur pour faire un défilement
  • C'est normal que ça ne fonctionne pas car tu fais un prevent default sur tous les liens du footer en faisant ça (ce qui annule la fonction par défaut du lien) :
    $("footer a").click(function(e) {
    		e.preventDefault();
    
    Donc après ton
    if(m === "#top"){...}
    
    il faut que tu ajoutes un else qui rétablit les liens non concernés par cette condition :
    else {
    var target = this.hash,
    window.location.hash = target;
    
    }
    
    Je n'ai pas testé mais ça devrait fonctionner...
Connectez-vous ou Inscrivez-vous pour répondre.