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

jQuery Discussion :

Element créé en jQuery innaccessible


Sujet :

jQuery

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 12
    Par défaut Element créé en jQuery innaccessible
    Bon voilà mon problème, je veux pouvoir éditer des lignes dans un tableau.
    Pour ça mes td on une classe "cellule" qui active (au click) le remplacement des "td" du même parent (le tr) par des "input" contenant la valeur des "td".
    Jusque là aucun souci
    Avant cette transformation, je rebascule tous les inputs du tableaux en td simples en appliquant également la classe "cellule" à tous ces "TD"

    Mon problème est que lorque la ligne est éditée et ensuite retransformée en valeurs simples, elle n'est plus active comme non reconnue dans le DOM car nouvellement créée et si j'utilise .live() alors la ligne est tout le temps clicable même lorsque'elle est éditée et du coup il est impossible de saisir dans les "input" car dès que l'on clique dessus il referme la ligne éditée... je ne sais pas si je suis clair mais voilà mon code, on peut surement faire plus simple mais bon :
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    $('.cellule').click(function() {
     
     
            //On remplace toutes les cellules avec un input par leur valeur
            $(".tab_archives td input").each( function () {
                $(this).replaceWith($(this).val()) ;
            });
     
            $(".tab_archives td").addClass('cellule');
     
     
            var liste='';
            var myparent=$(this).parent('tr').get(0);
            var parent_id=$(this).parent('tr').get(0).id;
            var tds=$('#'+parent_id).get(0).children;
            var chaine="";
     
            for(var i in tds){
                chaine=tds[i].innerHTML;
    //J'écarte les élements incorrects
                if(typeof(chaine)!='undefined'){
     
    //si le TD ne contient pas d'input
                    if(chaine.indexOf('input')=='-1'){
     
    //Je remplace chaque TD par un input avec sa valeur
                        $(tds[i]).replaceWith('<td><input style="width:50px;" id="'+parent_id+'_'+i+'" name="'+parent_id+'_'+i+'" type="text" value="'+chaine+'"/><\/td>');
     
                     }
     
                }
            }
     
     
        });
    Si vous avez une idée je suis preneur, j'ai entendu parler des fonctions callback mais je n'ai pas bien saisi comment cela fonctionne-t-il

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Novembre 2010
    Messages : 207
    Par défaut
    Juste après append, tu fais un unbind de l'évènement 'click' et un bind à nouveau de 'click' et ça sera bon.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 12
    Par défaut
    J'ai modifié le script de la façon suivante en intégrant bind et unbind :
    Mais visiblement quand je click il execute 2 fois le script "editTD" :
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    //Cette fonction réinitialise tous les TD du tableau, supprime la fonction au click et la réattribue
    function resetTD(){
     
            //On remplace toutes les cellule avec un input pas leur valeur
            $(".tab_archives td input").each( function () {
                $(this).replaceWith($(this).val());
            });
            $(".tab_archives td").unbind('click',editTD);
            $(".tab_archives td").bind('click',function(){
                    editTD($(this));
            });
        }
     
    //Execution de la fonction de reset du tableau qui rend cliquable les TD
        resetTD();
     
        function editTD(td){
            resetTD();
        var liste='';
            var myparent=$(td).parent('tr').get(0);
            var parent_id=$(td).parent('tr').get(0).id;
            var tds=$('#'+parent_id).get(0).children;
            var chaine="";
     
       for(var i in tds){
                chaine=tds[i].innerHTML;
                if(typeof(chaine)!='undefined'){
                    if(chaine.indexOf('input')=='-1'){
    //Je désactive la fonction editTD au click pour chacun des TD édités
                        $(tds[i]).unbind('click',editTD);
                        $(tds[i]).replaceWith('<td><input style="width:50px;" id="'+parent_id+'_'+i+'" name="'+parent_id+'_'+i+'" type="text" value="'+chaine+'"/><\/td>');
     
     
                    }
     
                }
            }
     
        }

Discussions similaires

  1. Modification nb elements <input> via jquery
    Par Invité(e) dans le forum jQuery
    Réponses: 3
    Dernier message: 16/11/2009, 20h40
  2. Jquery clone() modifier element
    Par swann_cb dans le forum jQuery
    Réponses: 2
    Dernier message: 21/07/2009, 10h04
  3. Jquery elements frere
    Par yahou29 dans le forum jQuery
    Réponses: 1
    Dernier message: 27/06/2009, 21h08
  4. JQuery : Selection selon une regexp sur id d'element
    Par popovitch130 dans le forum jQuery
    Réponses: 3
    Dernier message: 22/10/2008, 17h46

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