preventDefault() avec Firefox :(

preventDefault() avec Firefox :( - HTML/CSS - Programmation

Marsh Posté le 29-05-2014 à 01:27:30    

J'ai un code très simple via du javascript mais je n'obtient pas ce que je veux avec Firefox :(  
Je suis assez débutant en Javascript donc je ne pense pas que cela soit bien méchant mais comme j'ai un peu tout essayé... Je viens demander de l'aide.
 
En fait, je veux simplement que le lien appelle via ajax une page php qui execute une requête en arrière plan mais que la page sur laquelle se trouve le visiteur ne change pas.
Sous IE et Safari ca fonctionne exactement comme je veux déjà mais pas sous Firefox. Sous Firefox, la navigateur va sur la page indiquée en href du lien.
 
Côté HTML généré par du PHP

Code :
  1. include('../functions.js');
  2. echo '<a id="fv-'.$row['id'].'"  href="index.php?account=0&un='.$row['id'].'" onClick="fv2un('.$row['id'].')"><span class="blue fa fa-heart"></span></a>';


 
Et dans le fichier functions.js

Code :
  1. function fv2un(id)
  2. {
  3. preventDefault();
  4. var link = document.getElementById('fv-'+id).href;
  5. $.ajax({ //Make the ajax request
  6.  url: link,
  7.  cache: false
  8. }).done(function( html ) { //On complete run tooltip code
  9. //Display tooltip code goes here, returned text is variable html
  10. });


 
Merci pour votre temps :)

Message cité 1 fois
Message édité par clockover le 29-05-2014 à 01:27:58
Reply

Marsh Posté le 29-05-2014 à 01:27:30   

Reply

Marsh Posté le 29-05-2014 à 20:28:49    

clockover a écrit :


Code :
  1. function fv2un(id)
  2. {
  3. preventDefault();
  4. var link = document.getElementById('fv-'+id).href;
  5. $.ajax({ //Make the ajax request
  6.  url: link,
  7.  cache: false
  8. }).done(function( html ) { //On complete run tooltip code
  9. //Display tooltip code goes here, returned text is variable html
  10. });




 
Si tu veux annuler l'action de clic sur le lien, il faut renvoyer "false" dans l'attribut onclick, du genre:
 

Code :
  1. include('../functions.js');
  2. echo '<a id="fv-'.$row['id'].'"  href="index.php?account=0&un='.$row['id'].'" onClick="fv2un('.$row['id'].'); return false">
  3. <span class="blue fa fa-heart"></span></a>';


 
Et vire le preventDefault() dans le code javascript, ça ne sert à rien.

Reply

Marsh Posté le 29-05-2014 à 21:28:17    

Merci pour ce retour.  :)  
J'avais déjà essayé le return false.
Mais Firefox ne change pas de comportement, il continue d'aller sur la page en Href :(
 
Je viens de réessayer comme tu me l'a indiqué parce que moi je mettais avec un ; à la fin.

Code :
  1. echo '<a id="fv-'.$row['id'].'"  href="index.php?account=0&un='.$row['id'].'" onClick="fv2un('.$row['id'].'); return false;"><span class="blue fa fa-heart"></span></a>';


 
Mais pareil :(


Message édité par clockover le 29-05-2014 à 21:29:46
Reply

Marsh Posté le 29-05-2014 à 21:39:08    

Arf non cool :)
En enlevant le preventDefault(); ca semble marcher.
Je vais tester avec d'autres naviguateurs!  
 
Merci beaucoup tpierron

Reply

Marsh Posté le 30-05-2014 à 12:24:06    

preventDefault c'est une méthode de l'objet event.
 
"preventDefault();" tout seul, ça fait planter le code au milieu de l'exécution et donc le "return false" n'est jamais atteint.
 
Pour être certain que le "return false;" se fasse quelque soit les erreurs d'exécution du code situé avant, on utilise des try-catch : try { monCodeVaPeutEtrePlanter(); } catch (err) {}; return false;
 
 

Reply

Marsh Posté le 02-06-2014 à 07:56:41    

mais preventDefault est une méthode de Event
Donc normalement dans ton eventhandler (ta fonction quoi) tu dois recevoir en paramètre l'objet Event :  

Code :
  1. function fv2un(id,e)
  2. {
  3. e.preventDefault();
  4. var link = document.getElementById('fv-'+id).href;
  5. $.ajax({ //Make the ajax request
  6. url: link,
  7. cache: false
  8. }).done(function( html ) { //On complete run tooltip code
  9. //Display tooltip code goes here, returned text is variable html
  10. });


 
Et le HTML :  

Code :
  1. onClick="fv2un('.$row['id'].', event);"


---------------
Blablaté par Harko
Reply

Marsh Posté le 08-07-2014 à 03:16:25    

Merci :) Je suis pas encore super à l'aise avec Javascript. Je trouve ça plutôt un peu indigeste.

Reply

Marsh Posté le 08-07-2014 à 06:36:11    

en même temps tu l'utilises un peu n'importe comment et dans ton code HTML aussi.
 
Essaye de bien séparer les choses et de ne laisser aucun code JS dans ton HTML (ie: les onclicks et autres biduleries, doivent être initiées dans le JS)


---------------
Blablaté par Harko
Reply

Marsh Posté le 08-07-2014 à 10:52:37    

+1 pour le code javascript non intrusif dans le html. Il faut le mettre dans un fichier js appelé dans le <head>
 
Et sur l'événement onload du <body>, tu appelles la fonction d'initialisation du ou de tes scripts js.
 
Si y'a des événements à ajouter sur des balises (dans ton cas, des <a> ), tu fais un truc du genre :

Code :
  1. if (window.attachEvent) {
  2.    // IE
  3.    MaBaliseAvecUnID.attachEvent("onclick", MonEventClick);
  4. } else {
  5.    // FF
  6.    MaBaliseAvecUnID.addEventListener("click", MonEventClick, false);
  7. }


Voilà l'idée. Ainsi, ta le html d'un côté pour la structure du document, le css d'un autre côté pour la mise en page/forme et le js de l'autre, pour améliorer l'ergonomie ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 08-07-2014 à 19:08:02    

Oui en fait c'est déjà un peu le cas, mon include était là au milieu pour l'exemple :).
Meric pour les conseils :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed