IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

onDblClick ne marche pas


Sujet :

JavaScript

  1. #1
    Invité
    Invité(e)
    Par défaut Problème ondblclick qui ne fonctionne pas
    Bonjour,

    Ca fait plusieurs jours que je tourne en rond sans trouver de solution à mon problème.

    J'ai un tableau en HTML créé au moment du chargement de la page, mais seulement pour une partie. Ensuite il est possible de lui ajouter des lignes dynamiquement.
    Quand j'ajoute une ligne dynamiquement, il faut que je puisse affecter une fonction au double-clic de certaines des cases de cette ligne : chose que je n'arrive pas à faire

    Voilà un peu de code qui nous intéresse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    function changeEtatCase(cellule)
    {
    	element = cellule; //On récupère la cellule qui a été double-cliquée
    	element.innerHTML = '<input type="text" id="saisie" onBlur="afficheSaisie(this.value,element);" />'; //Affichage d'un champ text pour la saisie
    setTimeout(function(){document.getElementById('saisie').focus();},1000);
    }
    
    function ajoutLigne(uneDesignation,unMontant,uneOperation,unTypeTaxe,unTypeElt,unIdentifiant,uneQte,unPUHT)
    {
    	var newCell;
    	var newRow;
    
    	newRow = window.parent.opener.document.getElementById("tabFacture").insertRow((window.parent.opener.document.getElementById("montantHT").rowIndex)-1);
    	
            var cell1 = newRow.insertCell(0);
    	cell1.innerHTML = uneDesignation;
    	var cell2 = newRow.insertCell(1);
    	var cell3 = newRow.insertCell(2);
    	cell3.onDblClick = setTimeout(function(){changeEtatCase(this);},100);
    	var cell4 = newRow.insertCell(3);
    	var cell5 = newRow.insertCell(4);
    	var cell6 = newRow.insertCell(5);
    	var cell7 = newRow.insertCell(6);
    }
    J'ai fais plusieurs tests sur les lignes en rouge, en mettant ou pas les setTimeout, en appelant la fonction directement (sans mettre le mot function devant, ...), j'ai aussi essayé d'utiliser des cases différentes pour onDblClick (on m'a dit qu'il n'y avait pas de majuscules, mais quand je ne les met pas, il y a une exception qui se produit) ...
    Mais aucun des tests ne me donne de résultat !! Au final, quand je double-clique, il ne se passe jamais rien

    A noter que le premier setTimeout a été mis parce que sinon ça plantait parce que l'input était pas totalement créé !

    Merci pour votre aide !
    Dernière modification par Invité ; 25/01/2007 à 11h38.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bon ça a pas l'air d'interesser

    Au cas où quelqu'un s'intéresserait à mon problème, j'ai fais un zip de fichiers tests pour simuler mon problème.
    On y trouve le fichier HTML qui contient mon tableau, le fichier des fonctions javascript qui vont ajouter les lignes dynamiquement au tableau, le fichier PHP qui permet la saisi d'une ligne et le fichier css.

    Pour tester, il suffit de lancer la page HTML et de cliquer sur le bouton pour un ajouter un frais annexe.

    Voici le lien : essai.zip

    Quand la ligne se crée, il faut que l'on puisse double-cliquer dans la troisième case de cette nouvelle ligne (qté posée), chose qui ne marche pas.

    Merci
    Dernière modification par Invité ; 24/01/2007 à 14h54.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Est-ce qu'il n'y a que chez moi que ça le fait ?

  4. #4
    Membre Expert
    Inscrit en
    Septembre 2002
    Messages
    2 307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 307
    Par défaut
    essaie
    cell3.onDblClick = "setTimeout(function(){changeEtatCase(this);},100);";

  5. #5
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    bonjour,

    javascript est sensible à la casse, essaye cette syntaxe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cell3.ondblclick = function(){setTimeout(function(){changeEtatCase(this);},"100");}

  6. #6
    Invité
    Invité(e)
    Par défaut
    Merci pour vos réponses.

    En ce qui concerne la première réponse, je ne peux pas utiliser setTimeout car je veux que la fonction soit déclenchée seulement en réponse à un double-clique, et si je fais setTimeout, il le fait dès qu'il arrive à la ligne que tu m'as cité, donc ça ne va pas.

    En ce qui concerne la deuxième réponse, on m'a déjà dit ça, mais dans les manuels c'est bien onDblClick et pas ondblclick, d'ailleurs si je mets pas les majuscules,mon éditeur ne le reconnaît pas, et la console javascript me dis que changeEtatCase n'est pas définie, donc ça plante.
    Ta solution ne marche pas non plus.

    J'avais déjà testé ces solutions et elles ne fonctionnent pas ... Voilà, je sais plus quoi essayer !

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bon j'ai épuré toutes mes pages de tests, en enlevant touts les ondblclick définies pour les lignes créées au même moment que la page, et j'ai gardé le strict nécessaire en fonction, c'est-à-dire celle qui permet de récupérer l'identifiant d'un élément et celle qui crée une ligne dynamiquement mais dans le ondblclick, je fais un alert cette fois.

    Et bien même avec un truc si simple, le ondblclick n'est pas pris en compte, l'alert ne se fait jamais
    Quand je l'écris tout en minuscule, j'ai une exception qui se produit : Erreur : uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMWindowInternal.alert]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: http://localhost/essai/test.js :: anonymous :: line 20" data: no]

    Et quand je mets les majuscules, et bien ils ne se passent plus rien.

    C'est un ondblclick tout simple, alors pourquoi ça ne marche pas ?? Je comprends pas. Peut-être que ma case n'est pas encore tout à fait créer non ?

    Merci

  8. #8
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    A mon humble avis, c'est justement quand tu as l'erreur que la syntaxe est bonne

    Avec les majuscules, c'est dans les tag HTML. Dans un script JS, c'est minuscules.

    Dans ta fonction ChangeEtatCase, remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onBlur="afficheSaisie(this.value,element);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onBlur="afficheSaisie(this.value,this.parentNode);
    sinon, à l'éxécution, "element" ne sera pas connu (peut-être ton erreur bizarre) ...

    A+

  9. #9
    Invité
    Invité(e)
    Par défaut
    Merci pour ta réponse, mais je ne pense pas que le problème vienne de là pour deux raisons :
    • cette ligne existe pour d'autres cas où les lignes ne sont pas créées dynamiquement, et ça marche parfaitement
    • ensuite, j'ai viré cette fonction et mis un alert à la place dans le ondblclick pour voir s'il était pris en compte, et bien l'alert n'ai jamais fais malgré que je m'excite sur la souris !
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      cell3.ondblclick = function(){alert('essai');};
      ne marche pas


    Merci pour ton aide, mais ça n'a rien changé (oui, j'ai quand même testé )

    Je désespère

    EDIT : et pour mon erreur bizarre, c'est tantôt ça, tantôt "changeEtatCase n'est pas définie"
    Dernière modification par Invité ; 25/01/2007 à 15h14.

  10. #10
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    et à l'endroit où tu appelles ajoutLigne() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ajoutLigne(..); document.getElementById("a_changer").ondblclick="changeEtatCase(this);";
    ????

    A+

  11. #11
    Invité
    Invité(e)
    Par défaut
    C'est pas bête, je n'y avais pas pensé. Mais ça n'a pas marché, il me dis que a_changer n'a pas de propriétés ...
    Ca devient grave

    EDIT : petite précision par rapport à mon post d'avant, l'erreur bizarre je l'ai quand j'essaye de faire un aler sur le ondblclick, sinon pour les autres cas où j'essaye d'affecter la fonction changeEtatCase, il me dit qu'elle n'est pas définie.

  12. #12
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par poopsinou
    Ca devient grave
    Effectivement

    2 questions bêtes :
    * D'où appelles-tu la fonction ?
    * Tu les vois TOUTES, les cellules créées ?

    La vérité est peut-être ailleurs
    On peut voir l'ensemble de la page ?

    A+

  13. #13
    Invité
    Invité(e)
    Par défaut
    Alors j'appelle la fonction dans une page PHP quand j'ai saisi les informations de la ligne.

    Ensuite, je vois bien toutes les cellules (ça a été difficile, mais c'est bon, je me rapelles plus comment j'ai fais d'ailleurs pour résoudre le problème tellement je cherche de solutions ).

    Et enfin pour la page, je l'ai pas mise, mais j'ai fais un fichier zip qui contient tout pour ceux qui voudrait tester, je l'ai épuré à fond pour qu'on ne garde que ce qui est nécessaire (et même comme ça, ça marche pas ). Le fichier zip est là : fichier zip

    Il contient la page HTML qui contient la déclaration du tableau et les lignes non dynamiques (c'est cette page qui faut lancer), puis la page PHP qui permet la saisie d'une nouvelle ligne (en cliquant sur le bouton "ajouter des frais annexes") en appelant la fonction ajoutLigne, le fichier javascript qui contient les fonctions javascript et un fichier CSS.

    SI tu veux pas t'embêter, dis le, et je les mettrais sur mon ftp pour que tu puisses essayer directement dessus.

    Merci en tout cas de ton aide parce que là, j'ai saturé en une semaine !

  14. #14
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par poopsinou
    SI tu veux pas t'embêter, dis le, et je les mettrais sur mon ftp pour que tu puisses essayer directement dessus.
    C'est pas ça, mais n'ayant pas de serveur PHP, el local, ça va pas tourner terrible ...

  15. #15
    Invité
    Invité(e)
    Par défaut
    Ok ben alors je les ai mis pour que tu puisses regarder : Page de test

  16. #16
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    1° constat : le onBlur ne fonctionne pas non plus sur la 1° ligne (IE et FF).
    C'est peut-être de là qu'il faut (re)partir, non ?
    Avant de faire la même chose en dynamique ...

    A+

  17. #17
    Invité
    Invité(e)
    Par défaut
    Sisi ça marche C'est moi qui me suis planté en épurant le CSS, d'ailleurs là je suis plus centré sous Firefox, mais c'est pas ce qui compte
    Dernière modification par Invité ; 25/01/2007 à 16h17.

  18. #18
    Invité
    Invité(e)
    Par défaut
    Alors, c'est bizarre que ça ne marche pas le ondblclick non ? C'est à se tirer les cheveux

  19. #19
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    J'essaierai autre chose mais là, désolé, plus le temps ...

    A+

  20. #20
    Invité
    Invité(e)
    Par défaut
    Bon, j'ai même essayé avec addEventListener mais ça ne marche toujours pas.

    Et j'ai améliorer le code en utilisant des createElement et appendChild au lieu de innerHTML à tout va et autres affectations. Mais ça ne change rien non plus

    Firefox me dis toujours que ma fonction appelée dans le double clic n'est pas définie (IE ne dis rien). En gros, je peux mettre ce que je veux dans le ondblclick (alert, fonction, etc etc), rien ne se passe à part une erreur sous firefox (avec un alert j'ai une exception).
    Et je peux mettre ce que je veux, onmouseover,onclick,ondblclick, rien ne marche

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Méthode ondblclick qui ne marche pas oO
    Par kelaan dans le forum Général JavaScript
    Réponses: 18
    Dernier message: 18/02/2011, 12h30
  2. 'SHOW TABLES' marche pas sous postgresql !?
    Par fet dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 13/05/2004, 09h28
  3. Réponses: 9
    Dernier message: 07/05/2003, 12h57
  4. [GifDecoder] marche pas dans applet avec IE
    Par formentor dans le forum Applets
    Réponses: 2
    Dernier message: 06/05/2003, 10h43
  5. Sysdate qui marche pas ??
    Par StouffR dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/08/2002, 13h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo