Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/12/2010, 18h17   #1
Membre du Club
 
Inscription : décembre 2010
Messages : 190
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 190
Points : 60
Points : 60
Par défaut href et onclick en même temps

bonsoir à tous,

Je voudrais mettre un lien au niveau d'une page web, et ce dernier devra à la fois exécuter une requête sql présente dans un fichier hits.php mais aussi une instruction sur la page d'origine ( sans que je sois redirigé vers hits.php).

Voici mon code :

Code :
<a href="hits.php" onclick="AvrPopup(event, 'my', 'lightbox');">lien</a>
Mais dans ce cas, seul le onclick s'exécute mais la requête dans hits.php ne se lance pas.

Une idée??

Merci à vous.
AbouZaid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2010, 19h27   #2
Membre actif
 
Tobbi Filteau
Inscription : mai 2010
Messages : 176
Détails du profil
Informations personnelles :
Nom : Tobbi Filteau

Informations forums :
Inscription : mai 2010
Messages : 176
Points : 177
Points : 177
Dans ton cas, le mieux serait encore d'appeler ton script avec une requête AJAX synchrone (tu pourrais aussi bien avoir une requête AJAX asynchrone remarque et ça marcherait tout aussi bien c'est juste que c'est un peu plus simple de la garder synchrone).

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
function requeteAJAX() {
  if (window.XMLHttpRequest) {              
    AJAX=new XMLHttpRequest();              
  } else {                                  
    AJAX=new ActiveXObject("Microsoft.XMLHTTP");
  }
  if (AJAX) {
     AJAX.open("GET", 'hits.php', false);                             
     AJAX.send(null);
     return AJAX.responseText;                                         
  } else {
     return false;
  }                                             
}
La fonction ci-dessus devrait normalement appeler ton script "hits.php" sans changer de page. Ce que tu peux faire pour l'intégrer c'est simplement de l'ajouter dans la fonction que tu appelles sur le click de l'hyperlien:

Code :
1
2
3
4
5
6
7
8
9
10
11
 
<a href="AvrPopup(event, 'my', 'lightbox');">lien</a>
 
//Là où se trouve la fonction AvrPopup
 
function AvrPopup(...)
{
...
requeteAJAX();
...
}
Également, je ne suis pas sûr si ça va marcher, mais tu as essayé simplement de mettre return true sur le onclick de l'hyperlien? Si tu fais ça, oublie évidemment la partie AJAX mentionné avant. En fait, commence plutôt par ça avant de te lancer dans l'AJAX et voit ce qui se passe .

Code :
1
2
 
<a href="hits.php" onclick="AvrPopup(event, 'my', 'lightbox'); return true;">lien</a>
Bonne chance

Osu
osuwariboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2010, 19h48   #3
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 702
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 702
Points : 3 271
Points : 3 271
Salut

La question dont je me pose c'est :
Si on utilise comme élément HTML un lien (<a href>) dont l'URL n'est pas celle que l'on veut, alors pourquoi utiliser un lien ?
Plus de lien, plus de problème lié au click du lien, non ?

Pourquoi ne pas utiliser une DIV, un SPAN, un BUTTON, etc ..., autre élément qui ne comporte pas de lien ?
Si c'est une question de mise en forme, le Css permet d'obtenir le même rendu qu'un lien, quelque soit la balise.

Ne pas perdre de vu aussi que les moteurs de recherche, ou autre ne tiennent pas compte de JS, donc les "onclick" seront ignorés et c'est l'URL dans le href qui sera suivi (donc hits.php) si c'est des liens.


Sinon, pour couper l'herbe sous l'pied du click qui est naturellement effectué sur une balise <A>, c'est de faire un return false plutôt qu'un return true;
Enfin, sauf erreur.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/12/2010, 20h00   #4
Membre actif
 
Tobbi Filteau
Inscription : mai 2010
Messages : 176
Détails du profil
Informations personnelles :
Nom : Tobbi Filteau

Informations forums :
Inscription : mai 2010
Messages : 176
Points : 177
Points : 177
En fait, dans ma tête, je ne voulais pas vraiment "couper l'herbe sous l'pied" du onclick, c'était plutôt le contraire, j'avais l'impression que le fait d'avoir défini un onclick empêchait l'hyperlien de se rendre jusqu'à "l'exécution" de sa partie href, d'où mon "return true", mais tu as raison RunCodePhp, "return false" va effectivement arrêter le onclick
osuwariboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2010, 20h03   #5
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 802
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 802
Points : 35 807
Points : 35 807
Citation:
Envoyé par RunCodePhp
Si on utilise comme élément HTML un lien (<a href>) dont l'URL n'est pas celle que l'on veut, alors pourquoi utiliser un lien ?
Plus de lien, plus de problème lié au click du lien, non ?
Ca s'appelle du bon sens ça !

Citation:
Envoyé par RunCodePhp
Sinon, pour couper l'herbe sous l'pied du click qui est naturellement effectué sur une balise <A>, c'est de faire un return false plutôt qu'un return true;
Enfin, sauf erreur.
Non, pas d'erreur, mais attention, l'attribut onclick génère une fonction anonyme, c'est donc cette fonction anonyme qui doit retourner false, pas la fonction AvrPopup() :
Code :
onclick="return AvrPopup(event, 'my', 'lightbox');"
si la fonction AvrPopup() doit renvoyer l'autorisation ou non de suivre le lien,
Code :
onclick="AvrPopup(event, 'my', 'lightbox');return false;"
si le lien ne doit jamais être suivi.
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2010, 10h26   #6
Membre du Club
 
Inscription : décembre 2010
Messages : 190
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 190
Points : 60
Points : 60
bonjour et merci de vos réponses à tous,

Sinon, j'ai essayé le et le mais cela ne marche pas.

Ce que je voudrais en fait c'est tout simplement :
quand un internaute clique sur le lien, cela déclenche le script
Code :
AvrPopup(event, 'my', 'lightbox');
qui permet de lancer la lecture d'une vidéo, mais en même temps, je voudrais pouvoir accéder à ma base de données pour incrémenter le compteur de nombre de vu de ladite vidéo, d'où l'utilisation du fichier hits.php qui intègre une requête SQL qui met à jour la base.

Voilà, j'attends avec impatience vos idées.

EDIT: la méthode de osuwariboy marche parfaitement. Merciiii
AbouZaid est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h26.


 
 
 
 
Partenaires

Hébergement Web