11543 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous,

J'essaie de récupérer mon url complète avec un code du genre


$.ajax({
   type: "POST",
   url: "menu.php?page=accueil",...


Mais en fait j'ai l'impression que tout ce qui est derrière le "=" n'est pas pris en compte puisqu'il effectue des actions demandées sur toutes les pages commençant par "menu.php?page".

Je débute alors s'il y a des énormités dans ce que je viens d'écrire soyez indulgents. Smiley sweatdrop
Modifié par aelor (26 Aug 2011 - 20:54)
Regarde la doc Jquery pour les requêtes AJAX....

Essaie avec cela:

$.ajax({
   type: "POST",
   url: "menu.php",
   data: "page=accueil",...
Merci mamax mais en fait j'avais déjà essayé ce code.

J'ai le nez dans la doc jquery en ce moment même sinon, mais j'avoue ne pas tout comprendre. Smiley ohwell
Bon alors apres étude, l'ajax n'a rien a voir la dedans. Mea culpa.

Je vais revenir sur le fond de mon problème:

J'essaie de récupérer l'url de la page courante afin de mettre en "actif" le lien correspondant, afin que l'utilisateur voit sur quelle page du site il se trouve.

Je veux également que si l'utilisateur passe la souris sur un autre lien, le lien de la page active devienne "inactif". (j'espere que vous comprenez ce que j'écris parce que même moi j'ai du mal Smiley confus ).

Mon menu est un peu particulier. Il est fait avec des images superposées qui s'activent au passage de la souris avec un "mouseover"

En gros mon code donne ça:

$("#test1").mouseover(function () {
    $("#lien1").show();
	$("#fond_1").show();
		$("#lien2").hide();
		$("#fond_2").hide();
		$("#lien3").hide();
		$("#fond_3").hide();
		$("#lien4").hide();
		$("#fond_4").hide();
		$("#lien5").hide();
		$("#fond_5").hide();
		$("#lien6").hide();
		$("#fond_6").hide();
    });

$("#lien1").mouseout(function()
	{
		$("#lien1").hide();
		$("#fond_1").hide();
	});
	
$("#test2").mouseover(function () {
    $("#lien2").show();
	$("#fond_2").show();
		$("#lien1").hide();
		$("#fond_1").hide();
		$("#lien3").hide();
		$("#fond_3").hide();
		$("#lien4").hide();
		$("#fond_4").hide();
		$("#lien5").hide();
		$("#fond_5").hide();
		$("#lien6").hide();
		$("#fond_6").hide();
    });

$("#lien2").mouseout(function()
	{
		$("#lien2").hide();
		$("#fond_2").hide();
	});


Etc, etc...

Bon je suppose que c'est mal fait, mais ça fonctionne.

Mon objectif pour que le lien de la page active soit en état "actif" est de faire un code du type:

si la souris ne survole pas le menu et si l'url correspond à tel lien, on le passe en actif, sinon on applique les regles ci-dessus (voir script).

Donc je cherche à récupérer l'url en entier. En utilisant $.get je récupère que "menu.php?page" et pas ce qui vient derrière alors que c'est ça qui m'intéresse.

J'ai trouvé un moyen de récupérer ça via php grâce à $_SERVER['QUERY_STRING']; mais je ne sais pas comment le réutiliser dans le code js.


Voila si qqn comprend ce que j'ai essayé d'expliquer et veut bien me filer un coup de main je lui en serai très reconnaissant. Smiley biggrin
oui merci j'ai vu mais la premiere méthode me convenait bien.

Ca donne:

var page=(document.location.search);
var reg = new RegExp('accueil');


si je fait un alert(reg); ça me retourne bien accueil qui vient de l'url "menu.php?page=accueil.

Un petit pas pour l'homme, un grand pas pour moi!

Par contre la je bute sur autre chose.

Est-il possible avec jquery de donner l'instruction "si la souris n'est pas sur telle ou telle zone, alors "instruction""

En gros je veux donner une série d'instructions si la souris n'est pas sur mon menu, une autre série d'instructions si elle est dessus.
Le moins gourmand en ressource c'est de jouer avec .mouseover() (quand la souris se place sur le menu) et .mouseout() (quand la souris quitte le menu).
Ok merci de ton aide, je vais essayer avec ça.

Je te tiens au courant de l'avancée des choses.

Encore merci.
Ok donc après quelques essais, j'ai finit par obtenir quelque chose de (presque) pas mal.
Sauf qu'il y a encore un gros défaut que je n'arrive pas à corriger. Je voudrais savoir si on peut donner une priorité à une fonction qui est en contradiction avec une autre.

Pour illustrer mes propos j'ai pris quelques captures d'écran.
upload/36808-pageaccuei.jpg upload/36808-sourissuri.jpg upload/36808-sourissura.jpg

Voila sur la premiere image, je suis sur la page d'accueil, ma souris n'est pas sur le menu et le lien correspondant à la page est bien actif. Tout va bien.

Sur la deuxième image la souris est sur le lien "initiation". Le lien accueil se désactive et celui en hover s'active. La aussi tout va bien.

Sur la dernière image, je suis toujours sur la page accueil, et j'ai le curseur de ma souris sur le lien accueil. Et la, pas cool, le lien ne s'active pas. En fait ici deux fonction entrent contradiction. Celle qui dit que quand le curseur est sur le menu, le lien de la page active doit se désactiver (bon pour les autres liens du menu) et la fonction qui dit que quand on passe la souris sur un lien il doit s'activer.

Je met quelques lignes de code pour mieux comprendre (je met pas tout, c'est très long)

var page=(document.location.search);

var reg = new RegExp("accueil") ;
var url = reg.exec(page);

[...]

$(window).load(function () {
	if((url) == 'accueil'){
		$("#lien1").show();
		$("#fond_1").show();
	};


[...]

$('#menu').mouseout(function (){
	if((url) == 'accueil'){
	        $("#lien1").show();
	        $("#fond_1").show();
	};

[...]

$('#menu').mouseover(function (){
	if((url) == 'accueil'){
	        $("#lien1").hide();
		$("#fond_1").hide();
	};

$("#test1").mouseover(function () {
                $("#lien1").show();
                $("#fond_1").show();
		$("#lien2").hide();
		$("#fond_2").hide();
          [...]




Les [...] signifient que les mêmes règles s'appliquent pour les autres lien (2, 3, 4, 5 et 6)

Voila j'espère que mon explication est claire. En gros je voudrait savoir comment donner la priorité à la dernière fonction. Ou comment m'y prendre si je dois faire autrement.

Merci d'avance.
Salut,

Ce ne serais pas plus simple/adapté de passer par du css ?
Et rajouter un attribut id au lien qui correspond à la page actif ?

Quelque chose -si je ne me trompe pas- du style:

#lien1:focus, #lien1:active, #enabled {
background-image: url("fond1")
}
[...]

Modifié par jo_link_noir (28 Aug 2011 - 03:30)
Hum non je ne pense pas que ça puisse fonctionner, puisque chaque fond est une image qui prend l'ensemble du menu et pas juste du lien. Du coup il faut le désactiver quand on passe la souris sur un autre menu... De plus j'active deux images à chaque fois. Une image de fond (avec les planches illuminées) et les lettres néon allumées.

Je vois pas comment ça serait possible en css.
Je pense que tu bricoles une usine à gaz pour pas grand chose.
Si j'ai bien compris ton pb, il y a deux volets:
1 - savoir sur quelle page on se trouve pour décorer le lien en cours: si tu as un script serveur, il est plus efficace de coller une classe sur le lien correspondant. Si c'est du statique, soit tu fais de même, soit tu signes un élément parent.
2 - pour l'effet cosmétique, si tu t'en tiens à ce que tu as exposé, pas besoin de recourir à js.
Un truc dans ce style (pas testé):
li{ 
    list-style: none;}
    a{
        text-decoration: none;
    }
    li.current a{
        color: red;
    }
    #menu:hover a{
        color: blue;
    }
    #menu a:hover{
        color: red;
    }

et
<ul id="menu">
    <li class="current"><a href="#">a</a></li>
    <li><a href="#">b</a></li>
    <li><a href="#">c</a></li>
    <li><a href="#">d</a></li>
    <li><a href="#">e</a></li>
</ul>

devrait suddire.
Je ne vois pas non plus l'utilité d'avoir deux images de background dans ce cas: tu peux écraser le néon illuminé sur les planches.
Cependant, si tu y tiens, tu peux utiliser plusieurs images de bg en css3, c'est assez bien supporté (ie9)
Merci paolo (et les autres) pour ton aide. Je sais pas si ça va marcher mais je vais tester dans la semaine pour voir. Effectivement avec le recul je me dis que j'aurai pu faire plus simple, mais bon c'est en faisant des erreur qu'on progresse. (et moi, qu'est-ce que je progresse! Smiley biggol )

Je posterai ici pour annoncer la couleur une fois que j'aurai essayé tout ça.