77 Stimmen

Warum zeigt Firefox nicht die richtige Standardauswahloption an?

Ich entwickle eine Webanwendung zur Verwaltung von SKUS-Produkten. Ein Teil davon ist es, SKUs mit Produktnamen zu verknüpfen. In jeder Zeile einer Tabelle liste ich eine SKU auf und zeige eine <select> Box mit Produktnamen. Das Produkt, das derzeit mit dieser SKU in der Datenbank verknüpft ist, erhält ein Attribut wie selected="selected" . Diese kann über AJAX geändert und aktualisiert werden.

Es gibt eine Los des Produkts <option> s - 103 um genau zu sein - und diese Liste wird in der <select> in jeder Zeile.

Von einem anderen Eingang auf der Seite verwende ich jQuery AJAX-Anfragen, um neue SKU/Produkt-Zuordnungen hinzuzufügen, und um deutlich zu machen, dass sie sofort hinzugefügt werden, füge ich sie in die top des Tisches mit einem kleinen Highlight-Effekt. Wenn die Anzahl der SKUs über 10 oder so ansteigt und ich die Seite aktualisiere (was alles wieder aus der Datenbank lädt, geordnet nach Produktnamen), beginnt Firefox, einige falsche Optionen als standardmäßig ausgewählt anzuzeigen. Es ist nicht konsistent, welche falsche Option angezeigt wird, aber es scheint die Optionen zu verwechseln, die vor dem Neuladen der Seite vorhanden waren.

Wenn ich die <select> mit Firebug, die select="selected" ist auf der richtigen <option> Tag. Wenn Sie die Seite aktualisieren (oder die Seite verlassen und die URL dieser Seite erneut eingeben), wird sie nicht korrekt angezeigt, sondern hartes Auffrischen (Strg+F5) bewirkt .

Sowohl Chrome als auch IE7 zeigen dies von vornherein korrekt an.

Meine Theorie ist, dass dies eine Folge einer fehlerhaften Cache-Strategie von Firefox ist. Hört sich das richtig an? Gibt es eine Möglichkeit, in meinem Code zu sagen: "Wenn diese Seite aktualisiert wird, mache es zu einer harten Aktualisierung - lade alles von Grund auf neu?"

Update

Um dieses Problem zu lösen, habe ich meine Strategie geändert.

  • Zuvor hatte ich eine <select> mit einer langen Liste von <option> s in jeder Tabellenzeile, wobei der aktuelle Wert als Standardwert festgelegt wird
  • Jetzt lege ich den aktuellen Wert in einer <span> . Wenn der Benutzer auf eine Schaltfläche "Ändern" klickt, ersetze ich die <span> mit einer <select> und die Schaltfläche "Ändern" wird zu einer Schaltfläche "Bestätigen". Wenn sie die Optionen ändern und auf "Bestätigen" klicken, aktualisiert AJAX die Datenbank und die <select> geht zurück zu einem <span> , diesmal mit dem neuen Wert.

Dies hat zwei Vorteile:

  • Sie behebt den oben beschriebenen Fehler
  • Sie erfordert weit weniger DOM-Elemente auf der Seite (all diese überflüssigen <option> s)

8voto

Alex Punkte 101

Ich habe es geschafft, indem ich die versteckte Eingabe mit autocomplete="off" versehen habe.

0voto

lod3n Punkte 2863

Firebug verfügt über eine Cache-Deaktivierungsfunktion für genau dieses Szenario.

Die tiefere langfristige Lösung besteht darin, herauszufinden, wie man No-Cache-Header serverseitig setzt. Welchen Webserver verwenden Sie?

0voto

Morinar Punkte 3400

Jedes Mal, wenn ich in Firefox seltsame Fehler bei der Auswahl von Optionen hatte, lag das daran, dass ich mehrere Optionen als ausgewählt markiert hatte. Sind Sie ganz sicher, dass nur eine als solche markiert ist? Scheint, wie Sie aus der Wack ziemlich leicht bekommen könnte, wenn Sie ändern, dass mit AJAX sind.

0voto

Marco Demaio Punkte 32210

Zu Ihrer Information: Um zu verhindern, dass Firefox die zuvor gewählte Option nach dem Neuladen der Seite wiederherstellt, können Sie die gesamte <form> die den <select> Optionen innerhalb einer <iframe> .

Wenn Auswahlfelder vorhanden sind <iframe> und Sie die Containerseite neu laden, verhält sich Firefox endlich wie ALLE anderen Browser, indem er die Auswahloptionen einfach zurücksetzt.

0voto

user2182349 Punkte 8962

Dank an @BananaDeveloper ( https://stackoverflow.com/a/8258154/2182349 ) - dies ist meine Lösung, um dieses Problem auf einer einzelnen Seite in einer Anwendung zu lösen

Ich wollte den Code der Standard-/Open-Source-Anwendung nicht anpassen.

<Files "page_that_does_not_work.php">
        SetOutputFilter INFLATE;SUBSTITUTE;DEFLATE
        Substitute 's/<select/<select autocomplete="off"/n'
        Substitute 's/<form/<form novalidate/n'
</Files>

Apache-Dokumente für mod_substitute https://httpd.apache.org/docs/2.4/mod/mod_substitute.html

Dank an: https://serverfault.com/questions/843905/apache-mod-substitute-works-in-curl-but-not-on-browser für die SetOutputFilter

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X