Les auditeurs Javascript cliquent sur l'appât
Ayant écrit du code dans un fichier de test qui fonctionnait très bien, j'ai dû l'incorporer dans le code principal & ça ne s'est pas très bien passé.
Le code de base consistait en un simple fichier HTML avec un seul bouton appelé "souvenez-vous de ceci".
Cela avait un clic sur une fonction appelée showRememberMenu(). Cette fonction a créé un menu qui était affiché sous le bouton.
Le menu déroulant comportait plusieurs balises à ajouter aux données pour rappeler pourquoi l'utilisateur essayait de s'en souvenir. (Je suis vieux, j'ai besoin de toute l'aide possible pour me souvenir de choses.)
Cliquez sur le bouton, consultez le menu déroulant, cliquez sur la balise souhaitée et les données que vous consultez sont enregistrées dans un tableau avec cette balise. Après avoir cliqué sur le menu, il disparaît.
Ma tâche consistait alors à intégrer cela dans un script plus grand et à le voir fonctionner de la même manière... oh, peut-être pas. Cliquez sur le menu, stockez les données avec le tag et... quoi ? pourquoi le menu est toujours là ? Il a été supprimé dans l'original dès que l'on a cliqué dessus. Pourquoi ça ne part pas ?
Et si je clique sur la balise qui dit « Quitter, ne pas enregistrer », le menu est toujours affiché.
En tant qu'utilisateur, je regardais une carte contenant des données de la base de données. Cliquer sur ce bouton était un moyen de sauvegarder ces données pour une utilisation ultérieure. Ici vous pouvez voir la carte avec son nouveau bouton.
Cliquez sur ce bouton pour voir le menu déroulant et sélectionnez la balise pertinente pour mémoriser ces données...
Maintenant, faites la même chose avec d'autres cartes et vous disposez de toutes les données nécessaires pour accomplir certaines tâches, mais pourquoi le "&%!!! ce menu ne disparaît-il jamais ?
Après avoir manqué d'idées, j'ai contacté mon collègue Gemini l'IA. Cela m'a donné une première solution qui était exactement le code que j'avais déjà. Cela suggérait beaucoup de choses, dont aucune n’a fonctionné.
Il était convaincu que vérifier l'existence des nœuds et des éléments rendrait tout bon, mais ce n'est pas le cas.
Il a fallu environ une heure pour se faire dire des choses qui ne fonctionnaient pas et se faire donner des leçons sur des problèmes de timing, nécessitant éventuellement des retards, qui n'étaient vraiment pas pertinents, mais lentement, en équipe, nous avons résolu le problème.
Si vous voulez essayer de résoudre ce problème, je parie que vous pouvez le faire en moins de temps.
Voici le projet de code original qui fonctionne...
<!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8"> <title>Some Javascript</title> <link rel="stylesheet" href="./someJavascript.css"> <link rel="icon" href="favicons/favicon.ico" type="image/icon type"> </head> <body> <div> <p>and the javascript<br> </p> <pre class="brush:php;toolbar:false">let logToConsole=true; var rowData={THId:'2', TaskName:'To climb a tree', TaskDesc:'Try using hands & feet'}; var remember=[]; function rememberProcess(remember){ if(logToConsole) console.log('RememberProcess()'); for(i=0;i<remember.length;i+=2){ console.log('Item ',i/2+1,' of ', remember.length/2,' items', 'Remember as ',remember[i], remember[i+1]);} } function putDataIntoRemember(menuHeader,rowData){ if(logToConsole) console.log('putDataIntoRemember()'); remember.push(menuHeader); remember.push(rowData); } function deleteMenu(menuLu){ if(logToConsole) console.log('deleteMenu()'); menuLu.parentNode.removeChild(menuLu); } function showRememberMenu(){ if(logToConsole) console.log('showRememberMenu()'); if(document.querySelector('#rememberMenu') ) return; //menu already exists const remember_button = document.querySelector('#remember'); const menuHeaders=['EXIT no save', 'as Student', 'as Manager', 'as Author', 'as Task' , 'as Note']; menuLu=document.createElement('lu'); menuLu.id='rememberMenu'; for(let i=0;i<menuHeaders.length;i++){ li=document.createElement('li'); li.innerText=menuHeaders[i]; li.id=menuHeaders[i]; li.classList.add('rememberLi'); li.addEventListener('click', () => { //console.log('li button clicked', menuHeaders[i], rowData) if(menuHeaders[i]=='EXIT no save') {deleteMenu(menuLu);return}; putDataIntoRemember(menuHeaders[i], rowData);//[header][rowData] rememberProcess(remember);//do something with the stored data structure deleteMenu(menuLu); }) menuLu.appendChild(li); } remember_button.appendChild(menuLu); }
Il y a du CSS, mais ce n'est pas pertinent pour le problème
.remember_button { background-color: #5A5050; border: 0; border-radius: 5px; box-shadow: 0 10px 10px rgba(0, 0, 0, 0.2); color: #fff; font-size: 12px; padding: 3px 4px; position: relative; letter-spacing: 1px; width: 100px; } /*Button goes white on hover*/ .remember_button:hover { background-color: #ffffff; color: #001F61; cursor:pointer; } .rememberLi{ background-color: #aa9595; border: 0; border-radius: 5px; box-shadow: 0 10px 10px rgba(0, 0, 0, 0.2); color: #fff; font-size: 12px; padding: 3px 4px; position: relative; letter-spacing: 1px; width: 100px; } .rememberLi:hover { background-color: #ffffff; color: #001F61; cursor:pointer; }
Ce qui précède fonctionne, plus ou moins comme je le voulais.
Voici la version dans un système plus grand dont je ne publierai pas la totalité.
Une carte est produite dynamiquement et le code suivant est ajouté pour produire le même type de bouton que dans l'original
<!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8"> <title>Some Javascript</title> <link rel="stylesheet" href="./someJavascript.css"> <link rel="icon" href="favicons/favicon.ico" type="image/icon type"> </head> <body> <div> <p>and the javascript<br> </p> <pre class="brush:php;toolbar:false">let logToConsole=true; var rowData={THId:'2', TaskName:'To climb a tree', TaskDesc:'Try using hands & feet'}; var remember=[]; function rememberProcess(remember){ if(logToConsole) console.log('RememberProcess()'); for(i=0;i<remember.length;i+=2){ console.log('Item ',i/2+1,' of ', remember.length/2,' items', 'Remember as ',remember[i], remember[i+1]);} } function putDataIntoRemember(menuHeader,rowData){ if(logToConsole) console.log('putDataIntoRemember()'); remember.push(menuHeader); remember.push(rowData); } function deleteMenu(menuLu){ if(logToConsole) console.log('deleteMenu()'); menuLu.parentNode.removeChild(menuLu); } function showRememberMenu(){ if(logToConsole) console.log('showRememberMenu()'); if(document.querySelector('#rememberMenu') ) return; //menu already exists const remember_button = document.querySelector('#remember'); const menuHeaders=['EXIT no save', 'as Student', 'as Manager', 'as Author', 'as Task' , 'as Note']; menuLu=document.createElement('lu'); menuLu.id='rememberMenu'; for(let i=0;i<menuHeaders.length;i++){ li=document.createElement('li'); li.innerText=menuHeaders[i]; li.id=menuHeaders[i]; li.classList.add('rememberLi'); li.addEventListener('click', () => { //console.log('li button clicked', menuHeaders[i], rowData) if(menuHeaders[i]=='EXIT no save') {deleteMenu(menuLu);return}; putDataIntoRemember(menuHeaders[i], rowData);//[header][rowData] rememberProcess(remember);//do something with the stored data structure deleteMenu(menuLu); }) menuLu.appendChild(li); } remember_button.appendChild(menuLu); }
et le reste du javascript est presque identique à l'original
.remember_button { background-color: #5A5050; border: 0; border-radius: 5px; box-shadow: 0 10px 10px rgba(0, 0, 0, 0.2); color: #fff; font-size: 12px; padding: 3px 4px; position: relative; letter-spacing: 1px; width: 100px; } /*Button goes white on hover*/ .remember_button:hover { background-color: #ffffff; color: #001F61; cursor:pointer; } .rememberLi{ background-color: #aa9595; border: 0; border-radius: 5px; box-shadow: 0 10px 10px rgba(0, 0, 0, 0.2); color: #fff; font-size: 12px; padding: 3px 4px; position: relative; letter-spacing: 1px; width: 100px; } .rememberLi:hover { background-color: #ffffff; color: #001F61; cursor:pointer; }
Un rappel de ce à quoi ça ressemble avant d'être cliqué
et comment il reste bloqué après avoir cliqué
Je n'avais aucune idée de l'origine du problème, et Gemini était en train de donner une de ses conférences sur des sujets totalement hors de propos, mais Ai et moi avons finalement réduit les choses et maintenant cela semble tellement simple.
Alors pourquoi le menu persiste-t-il ?
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Des questions et des solutions fréquemment posées pour l'impression de billets thermiques frontaux pour le développement frontal, l'impression de billets est une exigence commune. Cependant, de nombreux développeurs mettent en œuvre ...

JavaScript est la pierre angulaire du développement Web moderne, et ses principales fonctions incluent la programmation axée sur les événements, la génération de contenu dynamique et la programmation asynchrone. 1) La programmation axée sur les événements permet aux pages Web de changer dynamiquement en fonction des opérations utilisateur. 2) La génération de contenu dynamique permet d'ajuster le contenu de la page en fonction des conditions. 3) La programmation asynchrone garantit que l'interface utilisateur n'est pas bloquée. JavaScript est largement utilisé dans l'interaction Web, les applications à une page et le développement côté serveur, améliorant considérablement la flexibilité de l'expérience utilisateur et du développement multiplateforme.

Il n'y a pas de salaire absolu pour les développeurs Python et JavaScript, selon les compétences et les besoins de l'industrie. 1. Python peut être davantage payé en science des données et en apprentissage automatique. 2. JavaScript a une grande demande dans le développement frontal et complet, et son salaire est également considérable. 3. Les facteurs d'influence comprennent l'expérience, la localisation géographique, la taille de l'entreprise et les compétences spécifiques.

Apprendre JavaScript n'est pas difficile, mais c'est difficile. 1) Comprendre les concepts de base tels que les variables, les types de données, les fonctions, etc. 2) Master la programmation asynchrone et les implémenter via des boucles d'événements. 3) Utilisez les opérations DOM et promettez de gérer les demandes asynchrones. 4) Évitez les erreurs courantes et utilisez des techniques de débogage. 5) Optimiser les performances et suivre les meilleures pratiques.

Comment fusionner les éléments du tableau avec le même ID dans un seul objet en JavaScript? Lors du traitement des données, nous rencontrons souvent la nécessité d'avoir le même ID ...

La discussion sur la réalisation des effets de défilement de parallaxe et d'animation des éléments dans cet article explorera comment réaliser le site officiel de Shiseido (https://www.shiseido.co.jp/sb/wonderland/) ...

Les dernières tendances de JavaScript incluent la montée en puissance de TypeScript, la popularité des frameworks et bibliothèques modernes et l'application de WebAssembly. Les prospects futurs couvrent des systèmes de type plus puissants, le développement du JavaScript côté serveur, l'expansion de l'intelligence artificielle et de l'apprentissage automatique, et le potentiel de l'informatique IoT et Edge.

Discussion approfondie des causes profondes de la différence de sortie Console.log. Cet article analysera les différences dans les résultats de sortie de la fonction Console.log dans un morceau de code et expliquera les raisons derrière. � ...
