Considérez le code suivant. Si je clique sur cmbMonkeys, cela provoque une boucle infinie de messages d'alerte dans Google Chrome. Ma solution pour cmbPeople fonctionne bien. Est-ce que quelqu'un sait d'une autre façon d'empêcher les boucles infinies lors de l'affichage d'alertes sur les événements de mise au point ou de flou, sans désactiver et réactiver l'événement?
<html> <head> <script> var eventHandler; function cmbPeople_OnFocusHandler() { alert("focus"); } function cmbPeople_CallFocusHandler(control) { eventHandler = control.onfocus; control.onfocus = null; cmbPeople_OnFocusHandler(); } function cmbPeople_CallBlurHandler(control) { control.onfocus = eventHandler; } function cmbMonkeys_FocusHandler(control) { alert("I like monkeys"); } </script> </head> <body> monkeys <select id="cmbMonkeys" onfocus="cmbMonkeys_FocusHandler(this)"></select> people <select id="cmbPeople" onfocus="cmbPeople_CallFocusHandler(this)" onblur="cmbPeople_CallBlurHandler(this)"></select> </body> </html>
Avec un simple gestionnaire d'état, peut-être?
var isFocus = false; function cmbPeople_CallFocusHandler(control) { if(!focus){ focus = true; cmbPeople_OnFocusHandler(); } } function cmbPeople_CallBlurHandler(){ isFocus = false; }