2012-04-12 5 views
1

Ich habe eine Seite, die zeigt (HTML-Ausgabe von ASP.net-Code hinter) Häuser/Eigenschaften. Ich habe das folgende Javascript erstellt, das auf Knopfdruck alle CSS-Klassen in den Eigenschaften ändert, so dass sich das HTML nicht ändert, aber die CSS-Klasse, um eine 2-Spalten-Ansicht zu erhalten.JavaScript-Methode wird nicht vollständig ausgeführt, wenn von (Dokument) aufgerufen .ready

Das funktioniert gut. Aber dann habe ich festgestellt, wenn die Benutzer die 2-Spalten-Ansicht auswählen und zur nächsten Seite navigieren (es ist eine Art von Seitenliste), wird die Ansicht auf das Original zurückgesetzt (1 Spalte beginnen).

Also habe ich folgendes getan. Wenn die Benutzer auf die Schaltfläche klickt, und geht von 1 columnview, bis 2 columnview ich diesen Wert in window.name als 1 speichern oder 2.

Danach buil ich dieses kleine Skript hier:

$(document).ready(setView()); 

function setView() { 
    if (window.name != null) { 
     if (window.name == 2) { 
      window.Show2Cols(); 
     } 
     if (window.name == 1) { 
      window.Show1Col(); 
     } 

    } 
} 

Diese funktioniert. Die Methode Show2Cols() beginnt wie folgt:

function Show2Cols() { 

alert("Show2Cols is executed"); 
    var nodes = document.getElementById("panden").getElementsByTagName("div"); 
    alert("Just got all nodes."); 
    for (i = 0; i < nodes.length; i++) 
    {.... 

Also, wenn ich die Seite zu ändern, es ist Pop-up sagen „Show2Cols wird ausgeführt“, aber es sagt nicht, „bekam nur alle Knoten“.

Da dies meine erste JS ist, und es wird nicht komplizierter, würde ich Sie gerne fragen, wo das Problem besteht?

Meine Vermutung ist, dass auf (Dokument) .ready() funktioniert, aber dann die .getElementById() -Methoden funktionieren noch nicht, da es noch nichts auf der Seite (visuell).

Vielen Dank im Voraus.

+2

warum tun Sie kombinieren jQuery mit reinem javascritp - benutze jQuery den ganzen Weg – scibuff

+7

'$ (document) .ready (setView());'; Dies führt 'setView' sofort aus (die Parens machen es zu einem Aufruf) Wenn Sie die Funktion beim Laden des DOM ausführen möchten, würden Sie' $ (document) .ready (setView); ' –

Antwort

5

Das Problem ist Ihr Bezug auf Ihre Funktion

$(document).ready(setView()); 

Sie die Funktion ausführen und seinen Wert als das DOM bereit Ereignisbehandlungsroutine zurückkehrt, ist hier, was Sie brauchen

$(document).ready(setView); 
+0

Nicht sicher, ich stimme der Bearbeitung zu, es ist für unerfahrene jQuery-Benutzer etwas klarer, was der Code tut, aber keine Code-Optimierung fördert. Wir sehen oft $ (document) .ready() bei Fragen, wenn der erfahrenste Entwickler den $ (function) Ansatz benutzt. – GillesC

Verwandte Themen