11521 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous
Je prends ma plume pour vous exposer mon problème j'ai une application de todolist avec plusieurs éléments dans un tableau identifié par un Id unique. je peux ajouter une ligne à mon tableau via une requête Ajax. jusque-là tout va bien. le problème arrive lorsque je veux éditer ma ligne en gros lorsque je clic sur édit j'ouvre un modal box contenant un formulaire avec les informations pre rempli mais je n'arrive pas à faire suivre l'id du tableau a l'ouverture de ma modale.

la ligne du tableau en question

echo "<tr><td>".$array['MESSAGE']."<br><a style='float:right;' id='edittodo' data-id='".$array['ID']."' data-toggle='modal' data-target='#myModal4' href='#'>Edit</a></td></tr>";






<div class="modal inmodal fade" id="myModal4" tabindex="-1" role="dialog"  aria-hidden="true">
   <div class="modal-dialog modal-lg">
        <div class="modal-content modal-dialoganimated fadeIn">
             <div class="modal-header">
                 <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
                                            <i class="fa fa-clock-o modal-icon"></i>
                                            <h4 class="modal-title">Edition TodoList</h4>
                                            <small>Vous pouvez changer les parametres.</small>
             </div>
              <div class="modal-body">
                 <?php 	
                    $infos = view_todo(30);
		    while ($array1  =  mysql_fetch_array($infos)){
                        
                        ici mon formulaire 
			} 
			?>
                                           
 </div>
<div class="modal-footer">
<button type="button" class="btn btn-white" data-dismiss="modal">Close</button>
 <button type="button" onclick="validateupgrade($('#myModal4').attr('data-id'));" data-dismiss="modal" class="btn btn-primary" id="save">Save changes</button>
</div>
</div>
</div>
</div>



function validateupgrade(id){
		
		//var ID = $('#myModal4').attr('data-id');
         var TITLE =document.getElementById("title").value;
		 var MESSAGE=document.getElementById("summernote").value;
		 var EXPIRATION_DATE=document.getElementById("expdate").value;
		 var PRIORITY=document.getElementById("prio").value;
		 var STATUS=$('input[name=radioInline]:checked').val();
		 // var content = $('#summernote').code());

		alert('ID = '+id);
		
              page=$(this).attr("href");
              $.ajax({
                type: "POST",
                url: "ajax_update_status.php",
                data: { 
               
                  TITLE:TITLE,MESSAGE:MESSAGE,EXPIRATION_DATE:EXPIRATION_DATE,PRIORITY:PRIORITY,STATUS:STATUS,ID:id
                
                },
                dataType: "html",
                cache:false,
                success:function(html){
                    $("#tabletodo").empty();
                    $("#tabletodo").append(html);
                //  reponse_activate1(html);
                 
                },
                error:function(XMLHttpRequest,textStatus, errorThrown){
                  reponse_sup("erreur lors du chargement de la page");
                }
              })
              return false;


	}

Ps dsl pour le code mal indenté mais j arrive pas a faire un truc propre

Donc en gros comment faire pour recuperer l'id de la ligne au clic sur le bouton Save changes
Ensuite je voudrais au clic sur le bouton 'Save changes' récupérer tous les champs de mon formulaire et les entrées en bdd grâce à une requête Ajax

Mais comment faire suivre cet id ??

J'espère que mon problème est énoncé clairement, si ce n'est pas le cas n'hésites pas à me dire je reformulerai au besoin
Merci pour votre aide
Modifié par nostradamus (19 Jul 2016 - 11:27)
Bonjour

Euh, je ne suis pas une spécialiste, mais là j'aurais mis un getAttribute() au lieu d'un attr() :

<button type="button" onclick="validateupgrade($('#myModal4').getAttribute('data-id'));" ...
Modérateur
non non c'est bien attr en jQuery. Par contre ça pourrait aussi s'écrire:

  $('#myModal4').data('id'); // == $('#myModal4').attr('data-id');


par contre
a écrit :
mais je n'arrive pas à faire suivre l'id du tableau a l'ouverture de ma modale

Apparemment récupérer l'id n'est pas un problème, mais savoir qu'en faire? Y'a plein de possibilité ça dépend de ce que tu faits (et actuellement c'est très peu clair).
Merci pour votre aide c'est vraiment sympa je me rends compte que ce n'est pas très clair je vais essayer de simplifier pour que cela sois plus compréhensible


j'ai donc un lien

<a id='edittodo' data-id='".$array['ID']."' data-toggle='modal' data-target='#myModal4' href='#'>Edit</a>


qui ouvre une modale (je simplifie le code pour plus de lisibilité)

<div class="modal inmodal fade" id="myModal4" tabindex="-1" role="dialog"  aria-hidden="true">
     <?php 	
    $infos = view_todo(38);
    while ($array1  =  mysql_fetch_array($infos)){



   }
<button type="button" onclick="validateupgrade( $('#myModal4').data('id'));" data-dismiss="modal" class="btn btn-primary" id="save">Save changes</button>
</div>


qui appel une fonction javascript

 function validateupgrade(id){
		alert('id = '+id);;
		}

mon premier problème se situe ici " $infos = view _todo(38); " sois 38 l'id de la ligne à modifier, mais comment faire en sorte de récupérer le data id passer à la modale ?


mon second problème et que la fonction validateupgrade en Js renvoie toujours id=undefined
Je dois faire une bêtise quelque part mais là j'avoue que je sèche
Modérateur
Ok je vois un peu mieux.

Ce n'est pas possible de modifier le php qui a été déjà processé en javascript. Il y a donc deux solutions:

1) solutions «simple» en mode rouleau-compresseur:

préparer toutes les modales possibles en php et afficher celle nécessaire au besoin. Cela fonctionne bien quand il y a 2-3 possibilités. Lorsque le nombre devient grand c'est très sale comme technique. (et si la page elle même ajoute des entrée en ajax, ce n'est juste pas possible).

2) Remplir le contenu de la boîte modale en javascript. à l'aide d'une requête AJAX. Si j'ai bien compris le but recherché ici, c'est de créer un CRUD en ajax. Il faut donc créer 4 services pour lire, créer, modifier et supprimer les entrées, donc:
GET my_url/todolist/get/123
POST my_url/todolist/new
POST my_url/todolist/update/123
(…) my_url/todolist/delete/123
Un grand merci pour la réponse, si je comprends bien tu veux que je remplisse mon formulaire avec une première requête Ajax qui permet de récupérer la structure du formulaire et au passage faire la/les requête(s) Sql pour la préremplir ?
Donc si je comprends toujours bien je ne me sers plus du tout du data id mais à place je récupérer le POST
Re Bonjour, c'est encore moi
J'ai réussi à faire à peux prés ce que je voulais faire mais, je ne suis pas sûr que cela soit très propre, je résume donc ce que j'ai fait.
Si une bonne âme pouvait me dire si je fais fausse route ça serait sympa.

j ai donc créer un bouton comme ceci


<div style='padding:10px;''>
   <button  onclick='essai(".$array['ID'].")'>Edit</button>
<div>


qui appel la fonction js suivant

function essai(id){
        var $modal = $('#load_popup_modal_show_id'+id);  
        $modal.load('test.php',{'id1': id},
        function(){
            $modal.modal('show');
        });
}



Qui appel donc la page tets.php qui affiche ma modale



<?php id1 = $_POST['id']; ?>
<form role="form" class="form-inline" role="form" id="form_load_content_id">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal">&times;</button>
        <h4 class="modal-title">Show Popup Title Here</h4>
      </div>
	    
	    <div class="modal-body" id="test">
			<?php 	
                               $infos = view_todo($id1);
				while ($array1  =  mysql_fetch_array($infos)){

                                  MON FORMULAIRE ICI
					
				} 

			?>
      </div>
      <div class="modal-footer">

	
      <button type="button" class="btn btn-default" data-dismiss="modal" onclick="oncloseupdate();">Close</button>


       <button type="button" onclick="validateupgrade(<?php echo $id1; ?>);" data-dismiss="modal" class="btn btn-primary" id="save">Save changes</button>
  </div>
</form>




Avec mes deux boutons qui appellent leur fonction respective

que voici :

function validateupgrade(id){
			
                var TITLE =document.getElementById("title").value;
		 var MESSAGE=document.getElementById("summernote").value;
		 var EXPIRATION_DATE=document.getElementById("expdate").value;
		 var PRIORITY=document.getElementById("prio").value;
		 var STATUS=$('input[name=radioInline]:checked').val();
		
               page=$(this).attr("href");
              $.ajax({
                type: "POST",
                url: "ajax_update_status.php",
                data: { 
               
                  TITLE:TITLE,MESSAGE:MESSAGE,EXPIRATION_DATE:EXPIRATION_DATE,PRIORITY:PRIORITY,STATUS:STATUS,ID:id
                
                },
                dataType: "html",
                cache:false,
                success:function(html){
                    $("#tabletodo").empty();
                    $("#tabletodo").append(html);
              
                 
                },
                error:function(XMLHttpRequest,textStatus, errorThrown){
                  reponse_sup("erreur lors du chargement de la page");
                }
              })
              return false;


	}

  function oncloseupdate(){
    page=$(this).attr("href");
              $.ajax({
                type: "POST",
                url: "ajax_refresh_data.php",
                data: {  },
                dataType: "html",
                cache:false,
                success:function(html){
                    $("#tabletodo").empty();
                    $("#tabletodo").append(html);              
                },
                error:function(XMLHttpRequest,textStatus, errorThrown){
                  reponse_sup("erreur lors du chargement de la page");
                }
              })
              return false;
  }



qui au final affiche ce que je veux sans recharger la page et sans utiliser les URL car cette petite todo sera membre d'un site plus important je voulais donc un fonctionnement comme un module.

Mon gros souci c'est que lorsque je clic sur édit ça prend du temps avant d'afficher la modale, temps dû au chargement des scripts js que j'ai dû réintégrer dans ma page test.php donc, je charge deux fois les mêmes scripts justes pour une pauvre petite modale
et de deux on a parfois l'impression que le bouton édit ne marche pas à cause du décalage clic affichage.
Si quelqu'un a une solution ou un conseil pour faire ça plus joliment je suis preneur
Merci beaucoup à tous
Modifié par nostradamus (20 Jul 2016 - 16:22)