2010-11-18 6 views
2

Ich habe eine Kleinanzeigen-Website, und in der index.html gibt es ein Formular. Dieses Formularziel wird auf einen iframe gesetzt, auch in index.html.Einige Browser werden versteckte Eingabe beim Einreichen des Formulars nicht aktualisieren

<form id="main" name="main" action="search.php" target="iframe" method="get"> 

I verwenden body onload das Formular zu senden, wenn Seite geladen wird:

<body onload='submit_form();'> 

Die Ergebnisse sind wie in der I iframe angezeigt gesagt, und ich verwende MySql Grenze Paging zu erstellen. Ich zeige ein „Weiter“ und „Zurück“ für den Benutzer: (all dies innerhalb des iframe angezeigt wird, so nenne ich die Funktion auf der übergeordneten Seite wie unten)

<a onclick='window.parent.page_upd(2)'>Page 2</a> 

function page_upd(p){ 
    document.getElementById('page').value=p; 
    document.forms['main'].submit(); 
} 

<input type="hidden" id="page" value="1"> 

Wie Sie sehe ich setzen ein verstecktes Eingang im Inneren index.html zum Seitennummer ich den Benutzer anzeigen möchten, dann ich das Formular aus, und in der Aktion (search.php) ich hole die Seite einreichen und zeigen dementsprechend:

//search.php 
    $page = $_GET['page']; 

Das Paging funktioniert In allen Browsern funktioniert also die Suche nach verschiedenen Seiten. Aber wenn tatsächlich auf ein Suchergebnis klicken, und zu einem ganz anderen Link (show_ad.php), und das Zurückschlagen gehen, wird der Benutzer zurück auf die erste Seite der Suchergebnisse gebracht.

Mit anderen Worten, "Seite" wird wieder auf 1 gesetzt. Aber nicht in allen Browsern, FF und sogar IE6 "merkt sich" der "Seite" Wert und dort ist es immer noch '2' zum Beispiel (für die zweite Seite), so dass das Formular die zweite Seite anzeigt.

In Chrome und Opera ist die Seite jedoch auf "1" eingestellt.

Weiß jemand, warum der Wert für die "Seiten" -Eingaben wieder auf 1 gesetzt wird, wenn er im Browser zurückkehrt?

Dank

Antwort

1

Ich denke, das Browser-Caching verwandt ist. Einige Browser scheinen die Seite zu laden, als ob Sie diese Seite neu geladen hätten, während andere Browser die richtige Seite immer noch aus dem Cache nehmen.

Eine Umgehungslösung könnte darin bestehen, eine eigene Zurück-Schaltfläche in Ihre Anwendung aufzunehmen, die den Benutzer auf die richtige Seite sendet.

+0

Dann würde ich an Variablen übergeben muß, und es wäre zu viel Arbeit bedeuten. Irgendeine andere Lösung? –

+1

ist es einfacher, die Seitennummer in einer Sitzungsvariablen zu speichern (d. H.$ _SESSION ['page_nbr']), wenn die Seite aufgerufen wird, wechseln Sie automatisch zu der Seite, die der Benutzer zuletzt in dieser Sitzung besucht hat. – Thariama

0

Ihr Eingabefeld benötigt ein name Attribut, das beim Absenden als Parametername verwendet wird. Das id Attribut dient nur als Kennung, um das Element auf der Seite zu finden.

<input type="hidden" id="page" name="page" value="1"> 
           ^^^^^^^^^^^ 
+0

In der Realität wird der Code vereinfacht. –

+1

ah, ok ... Ich habe gerade gelesen, dass es reichte, aber den Wert "zu verlieren", also machte diese Antwort zu der Zeit Sinn. – scunliffe

0

Das ist, weil die Seite nicht erneut geladen werden, dafür kein onLoad()

+0

Das Problem ist, dass Body Onload ausgelöst wird, wenn Sie von einer völlig anderen Verbindung zurückschlagen. Dies bewirkt, dass "Seite" auf 1 gesetzt wird. –

Verwandte Themen