Artikel Editieren funktioniert nicht (indexOf is not a function)

In diesem Forum können Wünsche geschrieben werden, die sich Benutzer für zukünftige OrderSprinter-Versionen wünschen.
Joe
Beiträge: 7
Registriert: Mo 11. Apr 2022, 08:31

Artikel Editieren funktioniert nicht (indexOf is not a function)

Beitrag von Joe »

Hallo,

ich hoffe ich bin hier halbwegs im richtigen Forum gelandet.
Ich habe gerade die aktuelle OrderSprinter-Version installiert.
Beim Editieren der Artikel scheint es aktuell ein Problem zu geben.
In die Kategorie kann man noch navigieren. Wenn ich dann allerdings auf die Unterkategorie klicke, dann passiert nichts.

In der Konsole kommt der Fehler:

Code: Alles auswählen

Uncaught TypeError: this.id.indexOf is not a function
Das Problem hier scheint zu sein, dass die Variable this.id auch Zahlen als Wert annehmen kann und auf Zahlen ist die indexOf Methode nicht definiert.
Ein zusätzliches .toString() vor jedem .indexOf() Aufruf scheint Abhilfe zu schaffen.

Rein theoretisch könnte man das Pattern

Code: Alles auswählen

string.indexOf("n") == 0
vermutlich auch noch durch

Code: Alles auswählen

string[0] == "n"
ersetzen. Der Unterschied dürfte hier vernachlässigbar sein, aber bei längeren Strings müsste die zweite Variante performanter sein.

Grüße
Joe
pichel
Administrator
Beiträge: 1171
Registriert: So 13. Sep 2015, 19:48
Wohnort: Hamburg
Kontaktdaten:

Re: Artikel Editieren funktioniert nicht (indexOf is not a function)

Beitrag von pichel »

Hallo Joe,

vielen Dank für den Beitrag, aber ich stehe gerade auf dem Schlauch. Weder mit Firefox noch mit Chrome in aktueller Version kann ich das bechriebene Problem nicht reproduzieren. Wenn ich dich richtig verstehe:
1. Artikelansicht
2. eine Kategorie anklicken
3. eine Kategorie darin anklicken
4. DIe Artikel darin editieren

Der Worlflow funktioniert bei mir. Hast du etwas anderes gemacht? (Und hattest du den Browsercache nach einem Update gelöscht?).

Gruß,

Stefan
Stefan Pichel
Entwickler der Kassensoftware OrderSprinter (http://www.ordersprinter.de)
Joe
Beiträge: 7
Registriert: Mo 11. Apr 2022, 08:31

Re: Artikel Editieren funktioniert nicht (indexOf is not a function)

Beitrag von Joe »

Hallo,

ich arbeite mit einer frischen Installation und habe die Testdaten importiert. Cache sollte keiner vorhanden sein, aber habe ich auch nochmal gelöscht.

Wenn ich auf die Kategorie "Speisen" klicke, dann öffnet sich das Menü. Wenn ich nun allerdings innerhalb der Speisen z.B. die Unterkategorie "Fastfood" anklicken möchte, dann passiert nichts (hierzu nochmal ein Bild https://abload.de/img/illustration7dkuq.png)

Es funktioniert immer dann wenn ein Menü-Eintrag einen String als ID hat (wie z.B. "n1" oder "n16") und immer dann nicht, wenn die ID eine reine Zahl ist ("1" oder "3").

Grüße
Joe
pichel
Administrator
Beiträge: 1171
Registriert: So 13. Sep 2015, 19:48
Wohnort: Hamburg
Kontaktdaten:

Re: Artikel Editieren funktioniert nicht (indexOf is not a function)

Beitrag von pichel »

Hallo Joe,

ich fürchte, ich stehe gerade auf dem Schlauch. Wenn ich die Kategorie Speise öffne und darin eine Unterkategorie anklicke, öffnet sich auch diese. Ein n im ID-String sollte nur bei neuen Einträgen stehen (siehe Screenshot) und auch hier expandiert der Panel wie erwartet.

Magst du mir schreiben, an welcher Stelle im Code du die IndexOf-Funktion umschreiben würdest? Dann weiß ich sicher auch, welches Fehlerbild zu reparieren möchtest.

Gruß,

Stefan
Dateianhänge
ids_in_artikelansicht.png
ids_in_artikelansicht.png (103.23 KiB) 450 mal betrachtet
Stefan Pichel
Entwickler der Kassensoftware OrderSprinter (http://www.ordersprinter.de)
Joe
Beiträge: 7
Registriert: Mo 11. Apr 2022, 08:31

Re: Artikel Editieren funktioniert nicht (indexOf is not a function)

Beitrag von Joe »

Mein Problem ist, dass sich manche Menüpunkte nicht öffnen. Das hat allerdings nicht wie ursprünglich vermutet mit der Ebene zu tun. Zum Beispiel funktioniert auch der Klick auf die Kategorie "Gutschein" nicht.

Das Panel "Speisekarte" lässt sich aufklappen.
Die darin enthaltenen Einträge "Speisen" und "Getränke" lassen sich öffnen.
Der Eintrag "Gutscheine" aber zum Beispiel lässt sich nicht öffnen.
Hier passiert nichts und es kommt nur besagte Meldung in der Konsole "Uncaught TypeError: this.id.indexOf is not a function".

Probleme hat mein Browser in diesem Fall mit der Zeile 259 im product.js

Code: Alles auswählen

if (this.id.indexOf("n") == 0) {
Wenn ich this.id logge, dann ist das "n1" für Speisen, "n16" für Getränke und "69" für Gutscheine.
Wenn this.id hier ein String ist gibt es keine Probleme (indexOf ist definiert auf Strings).
Wenn this.id hier eine Zahl ist gibt es ein Problem (indexOf ist nicht definiert auf Zahlen).

Ich hänge nochmal ein Bild an, bei dem man die Menü-Struktur sieht und den Stack-Trace.
Dateianhänge
Stack Trace / Artikel Menü
Stack Trace / Artikel Menü
FehlerArtikelansicht.png (218.41 KiB) 445 mal betrachtet
pichel
Administrator
Beiträge: 1171
Registriert: So 13. Sep 2015, 19:48
Wohnort: Hamburg
Kontaktdaten:

Re: Artikel Editieren funktioniert nicht (indexOf is not a function)

Beitrag von pichel »

Hallo Joe,

ich habe keine Ahnung, warum sich Oberfläche bei dir anders verhält als bei mir. Bei mir sind auch die aus einer reinen Zahl bestehenden IDs ein String, so dass die indexOf-Methode bei mir immer funktioniert (siehe Screenshot).

Ich habe das Vorkommen aber mal für die Version 2.3.8 in zwei Dateien (products.js und product.html) abgeändert und als products.zip angehängt. Die beiden Dateien im zip sollten aber auch zu deiner 2.3.7 noch kompatibel sein). Magst du es mal ausprobieren und mir Feedback geben?

Nebenbei bemerkt ist das uralter Anfänger-Code, den ich schon seit langem plane komplett neu zu schreiben, aber es fehlt mir immer die Zeit...

Gruß,

Stefan
Dateianhänge
products.zip
Gepatchte Files
(17.62 KiB) 22-mal heruntergeladen
In meiner Umgebung sind die IDs stehts Strings.
In meiner Umgebung sind die IDs stehts Strings.
IdIstBeiMirEinString.png (47.07 KiB) 428 mal betrachtet
Stefan Pichel
Entwickler der Kassensoftware OrderSprinter (http://www.ordersprinter.de)
Joe
Beiträge: 7
Registriert: Mo 11. Apr 2022, 08:31

Re: Artikel Editieren funktioniert nicht (indexOf is not a function)

Beitrag von Joe »

Hallo,
Ich habe das Vorkommen aber mal für die Version 2.3.8 in zwei Dateien (products.js und product.html) abgeändert und als products.zip angehängt. Die beiden Dateien im zip sollten aber auch zu deiner 2.3.7 noch kompatibel sein). Magst du es mal ausprobieren und mir Feedback geben?
Danke. Das funktioniert ohne Probleme.

Mich hat das unterschiedliche Verhalten irritiert. Ich habe daher nochmal nachgeforscht. Dieses Resultat kommt wohl daher, dass schon die JSON-Response von PHP unterschiedlich aussieht. Bei mir sind im JSON alle Zahlen auch als solche hinterlegt. In der Demo-Installation (und vermutlich auch bei dir?) sind es jedoch Strings. Ursache hierfür ist eine Änderung in PHP 8.1+.

Das Java-Script war also die ganze Zeit in Ordnung. Das Problem war eine zu neue PHP-Version, die ich versehentlich verwendet habe.
Ich hätte früher merken können, dass es an der PHP-Version liegt. Allerdings war der Fehler eher subtil, sodass mir nicht in den Sinn gekommen ist, dass es an der PHP-Version liegen könnte und nicht am JS.

Vielen Dank für deine Antworten. Tut mir leid, hierfür deine Zeit in Anspruch genommen zu haben.
Immerhin hast du nun diese Problematik und die Lösung für das Problem auf dem Schirm, wenn du die Anpassung an PHP 8.1+ angehst.

Grüße
Joe
pichel
Administrator
Beiträge: 1171
Registriert: So 13. Sep 2015, 19:48
Wohnort: Hamburg
Kontaktdaten:

Re: Artikel Editieren funktioniert nicht (indexOf is not a function)

Beitrag von pichel »

Hallo Joe,

vielen Dank für das Feedback. Nun ja, wenn sich die Systeme trotz gleicher Client-Konfiguration anders verhalten, muss die Ursache wohl auf der Serverseite liegen.

Ich selbst entwickle (und teste meist) noch auf PHP 7, weil das (noch) die am häufigsten installierte Haup-Version ist, wenn man eine der übliche Distros installiert (Ubuntu/Mint usw.).

Trotzdem habe ich natürlich den Anspruch, dass OrderSprinter auch mit den aktuellen PHP-Versionen kompatibel sein soll und so werde ich mir das natürlich anschauen und anpassen.

Viele Grüße,

Stefan Pichel
Stefan Pichel
Entwickler der Kassensoftware OrderSprinter (http://www.ordersprinter.de)
Antworten