Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
[gelöst][JavaScript] Code verhält sich beim Debuggen anders
kunsti
myCSharp.de - Member



Dabei seit:
Beiträge: 89

Themenstarter:

[gelöst][JavaScript] Code verhält sich beim Debuggen anders

beantworten | zitieren | melden

Hi,
ich habe folgenden JavaScript Code.
Dieser holt sich einen String, welcher durch ; getrennt eine Liste von strings enthält.
Für jede Checkbox soll nun überprüft werden, ob die ID in diesem String enthalten ist.
Wenn ja soll die Checkbox aktiviert werden.
        var dayString = "";
        $.get("GetDays", { taskName: selText }, function (result) {
            dayString = result;
        });
        //Check day checkboxes
        var checkboxes = document.getElementsByName("checkBoxDay")
        for (var i = 0; i < checkboxes.length; i++) {
            if (dayString.toString().indexOf(checkboxes[i].id) > -1)
                checkboxes[i].checked = true;
            else
                checkboxes[i].checked = false;
        }
Allerdings wurden die checkboxen nicht markiert.
Also habe ich mich mit Firebug ran gehängt.
Nun wurden die Checkboxen markiert und sind auch markiert geblieben.
Also habe ich es nochmals ohne Debugegr versucht. Nun wurden die Checkboxen nicht mehr angeharkt.
Hatte schon mal jemand ein ähnliches Problem oder hat eine Idee woran es liegen könnte?

Viele Grüße
kunsti
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von kunsti am .
private Nachricht | Beiträge des Benutzers
Geaz
myCSharp.de - Member

Avatar #avatar-3446.png


Dabei seit:
Beiträge: 148
Herkunft: Frankfurt

beantworten | zitieren | melden

Das hört sich sehr so an, als wären deine Checkboxen noch nicht im DOM vorhanden wenn dein Code ausgeführt wird.

Wartest du darauf, dass dein DOM komplett aufgebaut wurde bevor du deinen Code ausführst?
private Nachricht | Beiträge des Benutzers
kunsti
myCSharp.de - Member



Dabei seit:
Beiträge: 89

Themenstarter:

beantworten | zitieren | melden

Danke schon mal für die Antwort.
Mit Firebug kann man sich ja den DOM anschauen.
Da sind die Checkboxen vorhanden.
private Nachricht | Beiträge des Benutzers
Geaz
myCSharp.de - Member

Avatar #avatar-3446.png


Dabei seit:
Beiträge: 148
Herkunft: Frankfurt

beantworten | zitieren | melden

Das kann schon sein, dass die da sind wenn du dir das im Firebug anschaust. Aber das heißt nicht, dass die da sind wenn dein Code ausgeführt wird.

Also meine Frage: Wartest du auf den DOM (z.B. per $(document).ready(function(){ ... });)? Und führst erst dann deinen Code aus?
private Nachricht | Beiträge des Benutzers
kunsti
myCSharp.de - Member



Dabei seit:
Beiträge: 89

Themenstarter:

beantworten | zitieren | melden

Nein das mache ich nicht.
Der gezeigte Code wird innerhalb eines Events asufgerufen.
 $(".dropdown-menu li a").click(function () {

Hatte jetzt mal Testweise in das Skript noch

    $(document).ready(function () {
        alert("redy to go now");
    });
eingebaut.
Ich lade die Seite neu. Die Meldung erscheint, allerdings werden die Checkboxen weiterhin nur dann ausgewählt, wenn ich einen breakpoint setze.
private Nachricht | Beiträge des Benutzers
Geaz
myCSharp.de - Member

Avatar #avatar-3446.png


Dabei seit:
Beiträge: 148
Herkunft: Frankfurt

beantworten | zitieren | melden

Ich glaub ich sehe gerade das Problem (sollte mir das nächstemal den Code besser anschauen :D)....

Probier mal folgenden Code:

var dayString = "";
$.get("GetDays", { taskName: selText }, function (result) {
  dayString = result;

  //Check day checkboxes
  var checkboxes = document.getElementsByName("checkBoxDay");
  for (var i = 0; i < checkboxes.length; i++) {
    if (dayString.toString().indexOf(checkboxes[i].id) > -1)
      checkboxes[i].checked = true;
    else
      checkboxes[i].checked = false;
  }
});

Du wartest nicht auf das Result deines Ajax-Calls. Deswegen hat der Code nach dem "Get" nicht die Daten die er benötigt ("Get" ist async in jQuery). Du musst den Code der die Checkboxen markiert auch in die "Success"-Funktion deines Ajax-Calls verschieben.

Das erklärt auch warum es im Debugger funktioniert.
Dieser Beitrag wurde 5 mal editiert, zum letzten Mal von Geaz am .
private Nachricht | Beiträge des Benutzers
kunsti
myCSharp.de - Member



Dabei seit:
Beiträge: 89

Themenstarter:

beantworten | zitieren | melden

Zitat von Geaz
sollte mir das nächstemal den Code besser anschauen :D)

Oder eher ich.
Danke.
Ich hoffe mal das fällt unter die Kategorie "einmal und nie wieder"
private Nachricht | Beiträge des Benutzers