Arrays ab 250 Einträgen verhindern Funktionsaufruf
Roni
- javascript
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
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
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
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
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
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
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
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
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
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
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
Grundlage für Zitat #893.