par ecrivain77 01-Septembre-2022

Bonjour,
J'aimerai que l'ID de la textarea et du bouton change à chaque affichage de textarea.
Pour cela j'ai fais ce code.

if(isset ($_SESSION['TabInter'])){

for($ligne=0;$ligne<sizeof($_SESSION['TabInter']);$ligne++)
{
$txt_0=0;
$btn_0=0;
$js0=0;
$_SESSION['ValueInter']= $_SESSION['Start'].$_SESSION['TabInter'][$ligne].$_SESSION['Balises3'].$_SESSION['Balises4'].'['.$str.']'.$date.$version.$code;

?>
<table align="center">
    <tr align="center">
        <td>
        <form id="form-copier" >
        <!-- //champ de saisie de texte -->
        <textarea id="<?php $txt_0.$ligne; ?>" cols="80" rows="3"disabled="disabled"><?php print_r($_SESSION['ValueInter']) ?></textarea>
        <!-- //Bouton copier -->
        <input type="button" class="<?php $js0.$ligne; ?>" id="<?php $btn_0.$ligne; ?>" value="Copier la chaîne" onclick="this.disabled = 'disabled';this.type='checkbox';this.checked='checked'">
    </form>
        </td>
    </tr>
</table>
<?PHP
print_r($txt_0);
?>
<script>
var toCopy  = document.getElementById( '$txtInter' ),
var btnCopy = document.getElementById( 'btnInter' ),
            (() => {
            const button = document.querySelector('btnCopy');
 
            button.addEventListener("click", () => {
  const elemText = document.thisgetElementById('toCopy');
  // supprimer l'attribut disabled si existe
  const disabled = elemText.getAttribute("disabled");
  elemText.removeAttribute("disabled");
  // selectionne le contenu
  elemText.focus();
  elemText.select();
  // copy
  document.execCommand("copy");
  // réactive l'attribut disabled si existe
  disabled && elemText.setAttribute("disabled", disabled);
  // remise focus sur Btn
  button.focus();

 
                try {
                    if (document.execCommand('copy')) {
                        var alerte="Champs Work Notes* "
                         alert('La chaine des Balises a été copié ! \n\r Il suffit de la coller dans le ' + alerte + 'de ServiceNow.');
                        //document.location.replace('pagefin.php');
                    }
                } catch (err) {
                    alert('Pas possible de copier.');
                }
 
                window.getSelection().removeAllRanges();
            });
       
        })();
</script>

<?PHP
}
}

?>

Mais l'id du bouton et de la textarea reste à 0.

Merci pour votre aide.

1 Réponse

par Antoine 01-Septembre-2022

Bonjour vous pouvez créer une fonction JavaScript pour modifier l'ID d'un élément du DOM.

<textarea id="textarea_0"></textarea>
<input type="button" id="button_0" value="bouton" onclick="copy()">

<script>
document.addEventListener("DOMContentLoaded", function(changeID) {
  // On récupère les ID
  var textarea = document.getElementById("textarea_0");
  var bouton = document.getElementById("button_0");
  // On change les ID
  textarea.id = "textarea_1";
  bouton.id = "button_1";
  // On stocke les nouveaux ID dans le localStorage
  localStorage.setItem('stockage_id_textarea', textarea.id);
  localStorage.setItem('stockage_id_button', bouton.id);
});

// On copie le contenu du textarea quand le bouton est cliqué
function copy() {
  // On récupère l'ID du textarea préalablement stocké
  var textarea = document.getElementById(localStorage.getItem('stockage_id_textarea'));
  // On récupère son contenu et on copie
  textarea.select();
  document.execCommand("copy");
  // Ajoutez ensuite vos autres actions (supression disabled, encoche, etc...)
}
</script>

Dans cet exemple la fonction changeID s'exécute une fois que la page est chargée ; on récupère les deux ID de départ, et on les remplace par les nouveaux.

Si les valeurs des nouveaux ID sont générés coté serveur en PHP, vous remplacez par exemple :

textarea.id = "textarea_1";

par

textarea.id = "<?php echo $valeur;?>";

Les nouveaux ID sont ensuite stockés dans le localStorage (https://developer.mozilla.org/fr/docs/Web/API/Window/localStorage).

Enfin vous ajoutez la fonction copy où vous récupérez l'ID du textarea préalablement modifié et stocké, puis vous effectuez la copie, et vos autres actions.

par ecrivain77 01-Septembre-2022

Bonjour,
Merci beaucoup.

Bienvenue sur 1FORMATIK, où vous pouvez poser des questions en lien avec l'informatique et internet, et recevoir des réponses d'Antoine et d'autres internautes.

2.6k questions

3k réponses

...