J'ai posé une question à ce sujet sur le forum de jquery il y a quelques semaines sans chance, je vais donc essayer ici :) p>
J'ai fait un simple widget pour un projet que je travaille, mais j'ai rencontré un problème étrange. P>
Il est plus facile de l'expliquer avec un exemple de mise en œuvre. http://decko.dk/buttontest P>
sur la page il y a 3 bouton. Le premier est mon widget déroulant. Le suivant est un bouton Désactivé régulier (A) et le dernier un bouton activé régulier (B). Si vous actualisez ensuite la page (appuyez sur F5 ou autre), le bouton Activé est mystérieusement désactivé maintenant. Je n'ai aucune idée de la raison pour laquelle cela se produit, mais si le bouton A n'est pas désactivé pour commencer, le bouton B ne sera pas désactivé lorsque vous rafraîchissant. De plus, si je supprimais l'appel à insérer dans mon code de widget, le bouton ne sera pas désactivé. Quelqu'un peut-il éclairer pourquoi ce comportement étrange se produit? P>
Au fait, je n'ai pu reproduire cela que dans Firefox. P>
5 Réponses :
Je crois que ceci est un bogue dans la façon dont Firefox se souvient de former des valeurs de champ / de contrôle et des états:
code> elements dans le document et code> est désactivé. (Lorsque le bouton de style JQuery UI est activé ou désactivé, il définit l'élément sous-jacent au même état.) Li>
- Firefox se souvient que le second
code> est désactivé. li>
- Après une actualisation de la page, avant que les scripts sont exécutés, Firefox restaure les champs et les contrôles de formulaire. Il désactive la seconde
code>, mais car aucun script n'a été exécuté, le second bouton est code>. Li>.
- Lorsque JQuery UI crée le bouton de style pour
code>, il voit qu'il est désactivé et continue de la styler comme désactivé. li>
ol> Il y a deux problèmes ici: P>
- Comment Firefox se souvient de quels éléments sont désactivés. Cela ne prend pas en compte des éléments dynamiques. Je suggère Dépôt d'un bogue avec Mozilla pour cela. LI>
- Les éléments de formulaire restent désactivés après une actualisation de la page. Je ne sais pas si c'est le comportement correct, mais il y a deux Bugzilla rapporte à ce sujet. Li>
ol>
Le boîtier de test peut simplifier pour simplement ajouter un élément code> désactiver code>, pas de jQuery / JQuery UI nécessaire: p> xxx pré> p>
C'est ce que je pensais aussi mais espérait que c'était un virus de JQuery (comme cela serait beaucoup plus facile à réparer). Mais avec le code que vous montrez, il est absolument un bogue "Caching" dans Firefox.
J'ai aussi reçu ce problème et j'ai élaboré que c'était au comportement idiot dans Firefox, mon correctif était comme ça:
Avant: p>
//set up the buttons (and make sure firefox behaves)
$("button").button().attr("autocomplete", "off");
Je ne sais pas ce que "autocomplete" est censé faire pour un bouton - n'a pas fonctionné pour moi. J'ai utilisé $ (bouton '). RemoveAtTR ("désactivé"). Bouton (); code> à la place.
Il y a eu quelques versions de Firefox, car ce comportement peut avoir changé, mais l'autocomplète semblait empêcher l'habitude agaçante de Firefox d'enregistrer l'état des contrôles lorsqu'une page a été rafraîchie
Vous pouvez simplement définir l'attribut autocomplete = "OFF" CODE> dans le balisage HTML.
@OuberNeet: Oui, mais pour ceux d'entre nous qui n'utilisent pas encore HTML 5 et sont conscients des normes, cet attribut est invalide, alors que je ne le fais pas via JS / JQuery. Pourrait être une chose sémantique, mais là tu vas :-)
Réglage du expire code> HTTP en-tête à une date dans le passé, résolu le problème pour moi dans Firefox 6.0. P>
Voici la solution que j'ai trouvée fonctionne vraiment bien dans tous les navigateurs ...
Je donne à chaque bouton (pouvant être désactivé) une classe 'js_submit' p>
i puis réactive les personnes handicapées Boutons avec classe 'JS_SUBMIT' sur l'événement de pageHide qui incendie lorsqu'une page est déchargée. p>
i Emballez l'affectation de l'événement à l'intérieur d'essayer d'éviter les navigateurs qui ne prennent pas en charge cet événement (tel) Comme IE). P>
Voici le code: p>
Dans mon cas, c'était un bug bootstrap au lieu de cela, il aurait dû être p>
S'il vous plaît ajouter ceci comme commentaire.
merci de demander cela, mon pote - j'ai couru dans le même problème
J'ai trouvé cette question à la recherche d'une solution à un problème connexe, où chrome et ff ne afficheraient pas un bouton d'interface utilisateur jQuery désactivé désactivé (il ressemblait à un bouton activé seulement que vous ne pouvez pas cliquer dessus et que des info-bulles ne fonctionnaient pas. ), cela ne semblait que travailler comme prévu sur l'opéra. Après un peu de violer, il semble que le "problème" était que j'utilisais le "code>
.attr (" désactivé "," désactivé "," désactivé ") code> et.reMoveattr (" désactivé ") Code> au lieu de JQuery UI's.button ("Option", "Désactivé", ABOLOOLAN) CODE>. Une fois que je suis passé à ce dernier, il a fonctionné sur des navigateurs. J'espère que cela aide quelqu'un.