2009-07-10 13 views
0

Ich habe das folgende Skript, das zuerst einem Benutzer den ersten Absatz der Seite zeigt. Wenn der Benutzer auf "Mehr anzeigen" klickt, wird der Rest des Inhalts angezeigt.Postback führt den Code in jQuery nicht

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title></title> 
    <script src="jquery-1.3.2.js" type="text/javascript"></script> 
    <script language="javascript" type="text/javascript"> 
     $(function() { 
      $("#someDiv p:not(:first)").hide(); 
      $("#someDiv p:first").after('<a id="show" href="#">Show more</a>'); 

      $("#show").click(function(evt) { 
       evt.preventDefault(); 
       //window.location.reload(true); 
       $(this).hide(); 

       $("#someDiv p").show(); 
      }); 

     }); 
</script> 
</head> 
<body> 
<div id="someDiv"> 
<p>LOREM IPSUM TORRET LOREM IPSUM TORRET LOREM IPSUM TORRET LOREM IPSUM TORRETLOREM IPSUM TORRET 
LOREM IPSUM TORRET LOREM IPSUM TORRET LOREM IPSUM TORRETLOREM IPSUM TORRETLOREM IPSUM TORRET 
LOREM IPSUM TORRET LOREM IPSUM TORRET LOREM IPSUM TORRET LOREM IPSUM TORRETLOREM IPSUM TORRET 
LOREM IPSUM TORRET LOREM IPSUM TORRET LOREM IPSUM TORRETLOREM IPSUM TORRETLOREM IPSUM TORRET 
LOREM IPSUM TORRET LOREM IPSUM TORRET LOREM IPSUM TORRET LOREM IPSUM TORRETLOREM IPSUM TORRET 
LOREM IPSUM TORRET LOREM IPSUM TORRET LOREM IPSUM TORRETLOREM IPSUM TORRETLOREM IPSUM TORRET 
LOREM IPSUM TORRET LOREM IPSUM TORRET LOREM IPSUM TORRET LOREM IPSUM TORRETLOREM IPSUM TORRET 
LOREM IPSUM TORRET LOREM IPSUM TORRET LOREM IPSUM TORRETLOREM IPSUM TORRETLOREM IPSUM TORRET 
</p> 
<p>LOREM IPSUM TORRET LOREM IPSUM TORRET LOREM IPSUM TORRET LOREM IPSUM TORRETLOREM IPSUM TORRET 
LOREM IPSUM TORRET LOREM IPSUM TORRET LOREM IPSUM TORRETLOREM IPSUM TORRETLOREM IPSUM TORRET 
LOREM IPSUM TORRET LOREM IPSUM TORRET LOREM IPSUM TORRET LOREM IPSUM TORRETLOREM IPSUM TORRET 
LOREM IPSUM TORRET LOREM IPSUM TORRET LOREM IPSUM TORRETLOREM IPSUM TORRETLOREM IPSUM TORRET 
LOREM IPSUM TORRET LOREM IPSUM TORRET LOREM IPSUM TORRET LOREM IPSUM TORRETLOREM IPSUM TORRET 
LOREM IPSUM TORRET LOREM IPSUM TORRET LOREM IPSUM TORRETLOREM IPSUM TORRETLOREM IPSUM TORRET 
LOREM IPSUM TORRET LOREM IPSUM TORRET LOREM IPSUM TORRET LOREM IPSUM TORRETLOREM IPSUM TORRET 
LOREM IPSUM TORRET LOREM IPSUM TORRET LOREM IPSUM TORRETLOREM IPSUM TORRETLOREM IPSUM TORRET 
</p> 
<p>LOREM IPSUM TORRET LOREM IPSUM TORRET LOREM IPSUM TORRET LOREM IPSUM TORRETLOREM IPSUM TORRET 
LOREM IPSUM TORRET LOREM IPSUM TORRET LOREM IPSUM TORRETLOREM IPSUM TORRETLOREM IPSUM TORRET 
LOREM IPSUM TORRET LOREM IPSUM TORRET LOREM IPSUM TORRET LOREM IPSUM TORRETLOREM IPSUM TORRET 
LOREM IPSUM TORRET LOREM IPSUM TORRET LOREM IPSUM TORRETLOREM IPSUM TORRETLOREM IPSUM TORRET 
LOREM IPSUM TORRET LOREM IPSUM TORRET LOREM IPSUM TORRET LOREM IPSUM TORRETLOREM IPSUM TORRET 
LOREM IPSUM TORRET LOREM IPSUM TORRET LOREM IPSUM TORRETLOREM IPSUM TORRETLOREM IPSUM TORRET 
LOREM IPSUM TORRET LOREM IPSUM TORRET LOREM IPSUM TORRET LOREM IPSUM TORRETLOREM IPSUM TORRET 
LOREM IPSUM TORRET LOREM IPSUM TORRET LOREM IPSUM TORRETLOREM IPSUM TORRETLOREM IPSUM TORRET 
</p> 

</div> 
</body> 
</html> 

Dieser Code oben wie von dem berühmten DaveWard angegeben funktioniert absolut einwandfrei. Jedoch habe ich jetzt diesen Code Arbeit mit dieser Linie machen will unkommentiert

window.location.reload(true); 

Kann mir jemand sagen, wie man die gleichen Ergebnisse zu erzielen, wenn die Leitung über unkommentiert ist. Ich möchte eine Aktualisierung durchführen, wenn der Benutzer auf "ShowMore" klickt.

Bitte beachten Sie auch, dass dieser jQuery-Code in einer separaten Datei gespeichert und für mehrere Seiten verwendet wird. Die Seiten-URL ist im Format http://www.xyz.com/displaynews?newsid=x

+0

Warum möchten Sie die Seite neu laden, wenn die Daten bereits vorhanden sind? – karim79

Antwort

0

Um zu erreichen, was Sie wollen, müssen Sie eine kleine Änderung in der Taktik machen, da beim Neuladen einer Seite Ihr JavaScript von vorne beginnt (das Web ist zustandslos, also eine Seite neu laden) bedeutet, deinen Staat zu verlieren).

$("#show").click(function(evt) { 
    evt.preventDefault(); 
    window.location = window.location + "#showmore"; 
} 

Mit diesem Klick-Ereignis die gleiche Seite zu laden, aber mit einer Flagge oder Abfrage-Zeichenfolge, die Sie mehr erzählt angezeigt ... in ein

if (window.location.indexOf("#showmore") == -1) { 
    $("#someDiv p:not(:first)").hide(); 
    $("#someDiv p:first").after('<a id="show" href="#">Show more</a>'); 
} 

und wickeln Sie das Fell-Code werden sollte Überprüfen Sie, ob Sie den Text ausblenden sollten oder nicht.

+0

Der Code wird in einer zentralen js-Datei sein. Wie kann ich das Flag für mehrere Seiten handhaben? Es ist keine gute Idee, den QueryString zu manipulieren. – lols

+0

Sie müssen die Informationen weitergeben, da das Web zustandslos ist (d. H. Eine Seite weiß nichts über die nächste Seite). Alternative Optionen können sein, einen Cookie auf den Client zu schreiben, aber das wird unvorhersehbar. Wenn Sie nur einen Querystring oder ein Lesezeichen darauf setzen, können Sie garantieren, dass es funktioniert. – Fenton