Pourquoi setTimeout(fn, 0) peut résoudre les problèmes de population de sélection dynamique
Rencontre d'un bug où la valeur présélectionnée d'un élément de sélection rempli dynamiquement restait incorrect dans IE6, les développeurs ont cherché une explication sur l'efficacité inattendue de l'utilisation de setTimeout(fn, 0) pour résoudre le problème. problème.
Le problème provenait d'une condition de concurrence entre l'initialisation de la liste déroulante par le navigateur et le code JavaScript tentant de définir l'index sélectionné. Cette course, inhérente au thread unique d'exécution de JavaScript, a laissé le code en avance sur la préparation du navigateur à mettre à jour le DOM.
La solution de contournement setTimeout(fn, 0) a programmé l'exécution de la fonction de rappel de manière asynchrone après un bref délai ( environ 10 ms). Ce délai a permis au navigateur d'initialiser le DOM, laissant suffisamment de temps au code pour définir avec précision l'index sélectionné.
Cette solution a efficacement contourné la condition de concurrence critique en retardant l'exécution du code jusqu'à ce que le navigateur ait terminé les mises à jour nécessaires du DOM. . Il convient de noter que certaines versions d'Internet Explorer présentaient des comportements bizarres qui nécessitaient de telles solutions de contournement ou pouvaient indiquer de véritables problèmes au sein de la base de code. Pour une compréhension plus approfondie de ces concepts, reportez-vous à l'exposé de Philip Roberts « Qu'est-ce que c'est que la boucle d'événements ? »
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!