Roni: Arrays ab 250 Einträgen verhindern Funktionsaufruf

Hallo zusammen,

folgendes Problem:

In einer Schleife werden folgende Links erzeugt:
echo '<a href="javascript:markContents(new Array(''.implode('', '',$temp_content_ids).''));">mark all</a>'

Das Problem beginnt wenn das array $temp_content_ids, über mehr als 250 Einträge verfügt.
Die Ids die in $temp_content_ids gespeichert sind , sind maximal 5-Stellige zahlen.

Die javascript Funktion markContents( array ) wird erst gar nicht aufgerufen, zumindest wird ein "alert('blubb')" nicht ausgeführt.

Alles funktioniert eigentlich wunderbar, erst wenn das erzeugte Array zu groß wird, passiert (bei click) nichts mehr.

Habe nichts gefunden was eine Begrenzung der Arraygröße beschreibt.

Hat jemand eine Idee?

Vielen Dank im vorraus,

Roni

  1. Hallo,

    In einer Schleife werden folgende Links erzeugt:
    echo '<a href="javascript:markContents(new Array(''.implode('', '',$temp_content_ids).''));">mark all</a>'

    was kommt im Browser an? PHP-Code ist für browserseitige Effekte irrelevant
    und hilft auch nicht weiter.

    Wie sieht Deine Funktion markContents() aus?

    Die Ids die in $temp_content_ids gespeichert sind , sind maximal 5-Stellige zahlen.

    Willst Du damit sagen, dass Du Zahlen als id-Werte verwendest? Das wäre ein
    Fehler, siehe http://de.selfhtml.org/html/referenz/attribute.htm#id_idref_name.

    Freundliche Grüße

    Vinzenz

    1. Hi

      was kommt im Browser an? PHP-Code ist für browserseitige Effekte irrelevant
      und hilft auch nicht weiter.

      Es wird fogendes erzeugt:
      <a style="color:#666666" href="javascript:markContents(new Array('532', '537', '538', '921', '927'))">mark all...</a>

      Das funktioniert auch bei den ganz großen Arrays (Array.length > 250)
      Aber wenn man den Link betätigt, wird nur bei den "kleinen Arrays" die Funktion aufgerufen.

      Wie sieht Deine Funktion markContents() aus?

      function markContents( contents )
      {
      color = ''.$GLOBALS['colors']['left'].'';
      process = 'insert';
      string_array = '';
      for (var i=0; i<contents.length; i++)
      {
      document.getElementById('content_'+contents[i]).setAttribute('bgColor', color);
      string_array = string_array+'|'+contents[i];
      }
      }
           }

      Die Ids die in $temp_content_ids gespeichert sind , sind maximal 5-Stellige zahlen.

      Willst Du damit sagen, dass Du Zahlen als id-Werte verwendest? Das wäre ein
      Fehler, siehe http://de.selfhtml.org/html/referenz/attribute.htm#id_idref_name.

      Nein, ich Erzeuge Ein Array welches der Function markContents übergeben wird. Diese Funktion setzt nur die hintergrundfarbe neu.
      Wenn aber das erzeugte Array zu groß ist wird die Funktion nicht aufgerufen. (Habe ein alert('AHA') in die Funktion gesetzt dieses wurde nicht ausgeführt).

      Darf vielleicht der Wert von href="" eine bestimmte Zeichenanzahl nicht überschreiten?

      Viele Grüße

      Roni

      1. Hi,

        was kommt im Browser an? PHP-Code ist für browserseitige Effekte irrelevant
        und hilft auch nicht weiter.

        [...]

        function markContents( contents )
        {
        color = ''.$GLOBALS['colors']['left'].'';

        [...]

        wenn das im Browser ankommt, dann wird garantiert nichts anderes als ein JavaScript-Fehler passieren.

        Willst Du damit sagen, dass Du Zahlen als id-Werte verwendest? Das wäre ein
        Fehler, siehe http://de.selfhtml.org/html/referenz/attribute.htm#id_idref_name.
        Nein, ich Erzeuge Ein Array welches der Function markContents übergeben wird. Diese Funktion setzt nur die hintergrundfarbe neu.

        Setzt es die Hintergrundfarbe von Elementen neu, deren ID im Array steht? Dann haben diese Elemente illegale IDs. Korrigiere diesen schwerwiegenden Fehler.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Hallo,

          Setzt es die Hintergrundfarbe von Elementen neu, deren ID im Array steht? Dann haben diese Elemente illegale IDs. Korrigiere diesen schwerwiegenden Fehler.

          Die IDs sind richtig, schließlich funktionierte bei kleinen Arrays die Funktion wunderbar. Mit onClick an stelle von href funktioniert es nun auch mit den großen Arrays.

          Viele Grüße

          Roni

          1. Hi,

            Die IDs sind richtig,

            IDs, die nicht mit einem Buchstaben beginnen, sind *nicht* richtig.

            schließlich funktionierte bei kleinen Arrays die Funktion wunderbar.

            "Es funktioniert" war noch nie eine Erkenntnis, die in der Software-Entwicklung auch nur die geringste Relevanz hat. Wichtig sind die folgenden beiden:

            1.) Es funktioniert _nicht_ (Ausschlusskriterium), und
            2.) es ist richtig.

            Mit Ziffern beginnende IDs sind _nicht_ richtig, damit ist Dein Code reparaturbedürftig.

            Cheatah

            --
            X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
            X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
            1. Hi

              Mit Ziffern beginnende IDs sind _nicht_ richtig, damit ist Dein Code reparaturbedürftig.

              Seine IDs beginnen nicht mit Ziffern, damit ist sein Code nicht reparaturbedürftig.

              document.getElementById('content_'+contents[i]).setAttribute('bgColor', color);

              Wenn dieser Code PHP-Code darstellt, was höchstwahrscheinlich der Fall ist, dann kommt im Browser

              document.getElementById('content_'+contents[i]).setAttribute('bgColor', color);

              an. Wie man sieht, wird vor die Ziffern ein "content_" gestellt.

              mfg
              Felix

        2. Hi,

          function markContents( contents )
          {
          [...]
          document.getElementById('content_'+contents[i]).setAttribute('bgColor', color);

          Setzt es die Hintergrundfarbe von Elementen neu, deren ID im Array steht?

          Tut es nicht, die ids bekommen den Vorsatz 'content_'

          Die Elemente müssen aber table, tr, td, th oder body sein - andere Elemente haben kei bgcolor-Attribut. Warum Roni hier nicht die CSS-Eigenschaft background-color setzt, ist mir schleierhaft.

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          O o ostern ...
          Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
  2. Hi,

    ergänzend zu Vinzenz' Posting:

    echo '<a href="javascript:markContents(new Array(''.implode('', '',$temp_content_ids).''));">mark all</a>'

    [...]

    Habe nichts gefunden was eine Begrenzung der Arraygröße beschreibt.

    Hast Du etwas gefunden, dass - je nach Browser - eine Begrenzung der URL-Länge beschreibt? Und: Warum benutzt Du ein Link-Element, wenn Du ganz offenbar nichts verlinken möchtest?

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi,

      Hast Du etwas gefunden, dass - je nach Browser - eine Begrenzung der URL-Länge beschreibt?

      Auch ich habe nichts gefunden was die URL-Länge beschreibt.

      Und: Warum benutzt Du ein Link-Element, wenn Du ganz offenbar nichts verlinken möchtest?

      Du hast recht mit onClick funktioniert es. Habe zwar noch einen Syntaxfehler aber den bekomme ich auch noch behoben.

      Vielen Dank schon mal.

      Kann ich jetzt eigentlich davon ausgehen das es eine URL-Längenbegrenzung geben muß?

      Viele Grüße

      Roni

      1. Hi,

        Hast Du etwas gefunden, dass - je nach Browser - eine Begrenzung der URL-Länge beschreibt?
        Auch ich habe nichts gefunden was die URL-Länge beschreibt.

        was vermutlich daran liegt, dass diese gemäß Standard unbegrenzt ist. Leider sehen das diverse Systeme - allen voran gewisse Browser - etwas anders.

        Und: Warum benutzt Du ein Link-Element, wenn Du ganz offenbar nichts verlinken möchtest?
        Du hast recht mit onClick funktioniert es.

        Hoffentlich nicht im <a>-Element, für das es nämlich ohne Referenzierung einer anderen Ressource keinen Grund gibt. Ein Tipp noch: Halte Deinen HTML-Code tendenziell XHTML-konform, d.h. verwende onclick statt onClick.

        Kann ich jetzt eigentlich davon ausgehen das es eine URL-Längenbegrenzung geben muß?

        In der Theorie nicht, in der Praxis schon. In der Theorie sind aber auch Theorie und Praxis gleich, in der Praxis sind sie es nicht.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes