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 :

S�lectionner un �l�ment HTML en Javascript dans une boucle


Sujet :

JavaScript

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �clair�
    Homme Profil pro
    �tudiant
    Inscrit en
    Octobre 2013
    Messages
    273
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Octobre 2013
    Messages : 273
    Par d�faut S�lectionner un �l�ment HTML en Javascript dans une boucle
    Salut � tous,

    J'essaie de d�velopper un petit syst�me semblable a excel en version web : j'ai un tableau et je veux que lorsque je change la valeur d'une case, que �a s'enregistre dans la BDD
    Pour �a je compte utiliser Ajax.

    Le tableau se pr�sente sous forme de liste qui est g�n�r�e depuis la BDD (j'utilise donc une boucle en PHP pour g�n�rer le nombre de lignes n�cessaires)
    J'ai d�j� d�velopp� l'id�e mais je bloque sur un soucis : lorsque je r�cup�re la valeur de la case pour la passer en POST, le script ne r�cup�re que la valeur de la premi�re case de la premi�re ligne
    je pense qu'a cause du fait que ces lignes soient g�n�r�es en boucle, les id sont donc identiques pour chaque ligne et le script Javascript ne parvient donc pas a cibler pr�cis�ment la case que je veux

    Auriez vous une id�e pour r�soudre ce probl�me ?

    Voila mon code PHP :
    Code php : 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
    $req = $db->prepare ( "SELECT * FROM Eleves, D1a WHERE idEleves = idEleve");
    	$req->execute ();
    	while ( $userRow = $req->fetch ( PDO::FETCH_ASSOC )) {
    		echo '<tr>';
    		echo '<th>'.$userRow ['nom'].'</th>';
    		echo '<th>'.$userRow ['prenom'].'</th>';
    		echo '<td><div style="display: none" id="ideleves">'.$userRow['idEleve'].'</div><div style="display: none" id="colonne">francais</div><input class="form-control" type="number" id="champs" onchange="change()" value="'.$userRow ['francais'].'"></td>';
    		echo '<td><div style="display: none" id="ideleves">'.$userRow['idEleve'].'</div><div style="display: none" id="colonne">maths</div><input class="form-control" type="number" id="champs" onchange="change()" value="'.$userRow ['maths'].'"></td>';
    		echo '<td><div style="display: none" id="ideleves">'.$userRow['idEleve'].'</div><div style="display: none" id="colonne">histoire-geo</div><input class="form-control" type="number" id="champs" onchange="change()" value="'.$userRow ['histoire-geo'].'"></td>';
    		echo '<td><div style="display: none" id="ideleves">'.$userRow['idEleve'].'</div><div style="display: none" id="colonne">svt</div><input class="form-control" type="number" id="champs" onchange="change()" value="'.$userRow ['svt'].'"></td>';
    		echo '<td><div style="display: none" id="ideleves">'.$userRow['idEleve'].'</div><div style="display: none" id="colonne">techno</div><input class="form-control" type="number" id="champs" onchange="change()" value="'.$userRow ['techno'].'"></td>';
    		echo '<td><div style="display: none" id="ideleves">'.$userRow['idEleve'].'</div><div style="display: none" id="colonne">physique</div><input class="form-control" type="number" id="champs" onchange="change()" value="'.$userRow ['physique'].'"></td>';
    		echo '<td><div style="display: none" id="ideleves">'.$userRow['idEleve'].'</div><div style="display: none" id="colonne">arts plastiques</div><input class="form-control" type="number" id="champs" onchange="change()" value="'.$userRow ['arts plastiques'].'"></td>';
    		echo '<td><div style="display: none" id="ideleves">'.$userRow['idEleve'].'</div><div style="display: none" id="colonne">musique</div><input class="form-control" type="number" id="champs" onchange="change()" value="'.$userRow ['musique'].'"></td>';
    		echo '<td><div style="display: none" id="ideleves">'.$userRow['idEleve'].'</div><div style="display: none" id="colonne">eps</div><input class="form-control" type="number" id="champs" onchange="change()" value="'.$userRow ['eps'].'"></td>';
    		echo '<th></th>';
    		echo '</tr>';
    	}

    Et Javascript :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function change()
    {
    	var colonne = document.getElementById("colonne").innerHTML;
    	var valeur = document.getElementById("champs").value;
    	var idEleve = document.getElementById("ideleves").innerHTML;
    	objData = { colonne: colonne, valeur: valeur, idEleve: idEleve };
    	$.ajax({
    		url : './php/synthese.php',
    		type : 'POST',
    		data : objData,
    		dataType : 'html'
    	});
    }
    Merci d'avance

  2. #2
    Expert confirm�
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 681
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 681
    Par d�faut
    vous pouvez g�n�r� un identifiant unique en utilisant l'identifiant de l'�l�ve pour avoir par exemple "ideleves[1]", "champ[1]"
    l'avantages des crochets est que vous obtenez directement un tableau PHP � la r�ception dans $_POST["champ"]

  3. #3
    Membre �clair�
    Homme Profil pro
    �tudiant
    Inscrit en
    Octobre 2013
    Messages
    273
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Octobre 2013
    Messages : 273
    Par d�faut
    Et donc les crochets concr�tement je devrais les mettre ou ?

  4. #4
    Membre chevronn�
    Homme Profil pro
    Analyse syst�me
    Inscrit en
    Mai 2014
    Messages
    396
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Arm�nie

    Informations professionnelles :
    Activit� : Analyse syst�me
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2014
    Messages : 396
    Par d�faut
    Bonjour,

    Comme vous l'avez constat�, dans votre code, les identifiants "colonne", "champs" et "ideleves" sont utilis�s plusieurs fois. Or, dans une page HTML, un identifiant doit �tre unique. Plusieurs solutions :
    1�) Rendre ces identifiants uniques...
    2�) Utiliser les propri�t�s du DOM en s'inspirant, peut-�tre, du code ci-dessous.
    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
    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <script>
          function test(ligne) { alert(ligne.childNodes[0].innerHTML); }
        </script>
      </head>
      <body>
        <table border="1">
          <tr><td>Ligne 1</td><td onclick="test(this.parentNode);">Cliquez!</td></tr>
          <tr><td>Ligne 2</td><td onclick="test(this.parentNode);">Cliquez!</td></tr>
          <tr><td>Ligne 3</td><td onclick="test(this.parentNode);">Cliquez!</td></tr>
        </table>
      </body>
    </html>

  5. #5
    Membre �clair�
    Homme Profil pro
    �tudiant
    Inscrit en
    Octobre 2013
    Messages
    273
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Octobre 2013
    Messages : 273
    Par d�faut
    D�j�, rendre ces identifiants uniques ne me parait pas �tre une bonne solution, sinon je devrais faire du statique cot� JavaScript pour r�cup�rer chaque id pour chaque colonne etc..
    La deuxi�me solution me parait plut�t bien
    Donc si je comprend bien, en passant en param�tre le "this", je peut cibler le champs sur lequel j'appelle la fonction, et donc pas besoin d'id, je le fais directement en JavaScript ?

  6. #6
    Membre chevronn�
    Homme Profil pro
    Analyse syst�me
    Inscrit en
    Mai 2014
    Messages
    396
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Arm�nie

    Informations professionnelles :
    Activit� : Analyse syst�me
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2014
    Messages : 396
    Par d�faut
    Bonjour,

    Au premier abord et � mon avis, les deux solutions sont bonnes. Selon ce que j'aurais � programmer, j'utiliserais tant�t une solution, tant�t l'autre. Dans votre cas, je ne sais pas. En fait, je n'ai pas compris pourquoi vous utilisez des <div style="display: none" ...>.

    C'est un autre sujet mais est-il utile de faire une requ�te ajax � chaque modification? Un bouton "Enregistrer" ne serait-il pas pr�f�rable?

Discussions similaires

  1. R�ponses: 10
    Dernier message: 22/09/2015, 08h58
  2. Importation biblioth�ques javascript dans une page PHP/HTML
    Par carkiko dans le forum G�n�ral JavaScript
    R�ponses: 10
    Dernier message: 12/05/2015, 11h51
  3. R�ponses: 3
    Dernier message: 30/07/2014, 20h52
  4. [RegEx] Cibl� les blocs Javascript dans une page HTML
    Par budhax dans le forum Langage
    R�ponses: 2
    Dernier message: 20/05/2010, 15h24
  5. Affichage de XML gr�ce � du javascript dans une page HTML
    Par broise dans le forum XML/XSL et SOAP
    R�ponses: 1
    Dernier message: 30/07/2008, 10h41

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