11521 sujets

JavaScript, DOM et API Web HTML5

Bonjour,
Voici mon pb auquel je ne trouve pas la solution.

Je dispose d'une liste déroulante avec comme valeurs possibles oui ou non.
Quand je sélectionne OUI, je souhaiterais qu'il m'affiche, sans recharger ma page, dans une cellule plus bas une valeur (TEST) numérique incrémentée.

Par exemple :
sur la fiche n°1 : select=oui, donc TEST=1
sur la fiche n°2 : select=non
sur la fiche n°3 : select=non
sur la fiche n°4 : select=oui, donc TEST=2
sur la fiche n°5 : select=oui, donc TEST=3

Je ne peux même pas dire de vous présenter mon code car il part dans tous les sens entre les ONCHANGE, GetElement...
Je précise juste que je veux éviter AJAX afin de pouvoir maitriser quelque peu le code.

Si quelqu'un de balaise en javascript pouvait me mettre sur la bonne piste, je lui en serais très reconnaissant.

Merci d'avance
Modérateur
Salut ?

Tout tes select sont sur la même page ?

Sinon il "suffit" d'ajouter un event listener ( https://www.w3schools.com/js/js_htmldom_eventlistener.asp ) sur chaque select qui lancera une unique fonction qui va compter les oui puis afficher le résultat.

Ca doit donner un truc comme ça (attention c'est pas du code hein c'est un brouillon de reflexion) :

select1.onchange(count)
select2.onchange(count)
select3.onchange(count)
select4.onchange(count)

count {
  result = 0
  for each select 
    result +1 if "yes"
  display result
}


Ca bloque ou dans ton code ?
Modifié par _laurent (20 Feb 2018 - 16:17)
Petite précision :
Il s'agit à chaque fois de fiche unique, donc un seul select.

Lorsque je selectionne le oui, je souhaite que la valeur TEST prenne une valeur numérique "incrémentée, c'est à dire la valeur suivante récupérer dans ma base de donnée.

J'ai bien peur de mélanger javascript et php. Donc, est-ce vraiment possible sans AJAX?
Modérateur
Ah ok.

L'AJAX va permettre de faire des changements des actions sans recharger la page. Généralement il va appeler un script PHP qui va s’exécuter avec les données reçues et retourner ou non un résultat. Exemple pour l'autocompletion d'un champ de recherche on commence a taper 3 lettre elles sont envoyé au script PHP via AJAX qui va chercher en base les correspondances et retourner les résultats qu'on va afficher sans recharger la page.

J'ai du mal a voir l’intérêt qu'aurait ici l'AJAX. Ou alors j'ai du mal a saisir l'architecture de ces fiches.

nounoursgafi a écrit :
Quand je sélectionne OUI, je souhaiterais qu'il m'affiche, sans recharger ma page, dans une cellule plus bas une valeur (TEST) numérique incrémentée.


Pourquoi "sans recharger" ?
A quel moment tu change de fiche du coup si ca ne recharge pas ?
Il faut afficher le résultat les 4 autres pages aussi ? Mais si on y a pas encore répondu ? Il faut retenir la valeur en mémoire du coup ?
Pourquoi avoir séparé les fiches ?

nounoursgafi a écrit :
Je précise juste que je veux éviter AJAX afin de pouvoir maitriser quelque peu le code.

Si tu veux faire des action sans recharger une page il faudra y passer mais c'est pas bien compliqué et ton code ne sera pas sauvage pour autant ! Smiley biggrin
Je vais tâcher d'être un peu plus explicite.

Mes fiches existent déjà dans ma base de données.

Dans chacune d'entres elles il y a le champ AUTORISATION.
Quand le service concerné modifie la fiche, c'est pour autoriser (ou pas) l'action demandée.

Donc, quand AUTORISATION passe à "OUI", j'aimerais qu'un numero s'affiche plus bas sur la variable TEST sans que la page soit rechargée.

Voici une partie de mon code :

	<script type="text/javascript">
        function selectReactif() {
            document.getElementById('autorisation').onchange = codeAExecuter;
        }
        function codeAExecuter() {
              var valeur = document.getElementById('autorisation').value;
        }
        window.onload = selectReactif;
    </script>

.....

      <td width="150"><select name=autorisation value="autorisation" size=1 maxlenght=30 onChange="selectReactif">
        <option><?php echo $autorisation; ?></option>
        <option value="oui">oui</option>
        <option value="non">non</option>
      </select></td>
      <td width="250">&nbsp;</td>

.....

<?php
$test='exampledenumerotation';
		if ($autorisation='oui') {echo $test;
							   };
		?>


Merci
Modérateur
Ah j'avais pas la vue d'ensemble.

En fait quand on change le select il faut que tu changes l'autorisation en base (via AJAX du coup si tu ne veux pas recharger la page je ne pense pas que tu puisse le faire autrement).

L'affichage de la variable en bas sera le retour de ton appel AJAX. Cet affichage n'est que le résultat de ton enregistrement en base... non ?

Ton script PHP va recevoir la valeur du select, la changer en base et te renvoyer le nombre de oui sur les 5 fiches.
Bonjour, nounoursgafi.

Je n'ai pas regardé l'ensemble mais je vois une erreur significative dans votre code.
En bas de l'encadré noir, il y a :
if ($autorisation='oui') {echo $test;
				    };

Mettre seulement le signe 'égal' est une affectation. Pour avoir une comparaison, il faut le doubler, à savoir :
if ($autorisation=='oui') 


Smiley smile