AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Auf website mit JavaScript kreierte Kästchen gezielt ankreuzen.
Thema durchsuchen
Ansicht
Themen-Optionen

Auf website mit JavaScript kreierte Kästchen gezielt ankreuzen.

Ein Thema von Rued · begonnen am 9. Nov 2024 · letzter Beitrag vom 20. Nov 2024
Antwort Antwort
Benutzerbild von gubbe
gubbe

Registriert seit: 8. Okt 2005
Ort: Schleswig-Holstein
150 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Auf website mit JavaScript kreierte Kästchen gezielt ankreuzen.

  Alt 14. Nov 2024, 18:10
Ich bin nicht sicher, ob ich es richtig verstehe, aber ich versuche mal weitere Erklärungen:

document ist nur im Browser deklariert. Der Code muss also immer von Delphi aus mit browser.ExecuteScript aufgerufen werden.

Das Skript ist nur ein String, den Du in Delphi zusammenbauen kannst. Du könntest Dir also zunächst in Delphi das Array bauen mit den Werten, die Du setzen willst.
Dann kannst Du das nochmal durchgehen und den Code zum Ankreuzen im Browser daraus generieren.

Das Ergebnis könnte dann so ähnlich aussehen:
Code:

let kaestchen = [2,5,8,11];

function ankreuzen(kaestchen, tippfeld) {
  for (const element of kaestchen) {
    document.querySelector('div#tip-field-' + tippfeld + ' div.box[data-value="' + element + '"]').classList.add('checked');
  }
}

ankreuzen(kaestchen, 1);
Diese Javascript-Code rufst dann mit browser.ExecuteScript auf.
  Mit Zitat antworten Zitat
Benutzerbild von Rued
Rued

Registriert seit: 14. Mai 2008
Ort: Schleching
108 Beiträge
 
Delphi 12 Athens
 
#2

AW: Auf website mit JavaScript kreierte Kästchen gezielt ankreuzen.

  Alt 16. Nov 2024, 11:58
Ich kann mich nur nochmals bedanken für Deine Unterstützung. Leider ist mir das Zusammenspiel von Delph-Code und JavaScript ein Rätsel.

Zunächst habe ich keine Ahnung, wie ich mehrzeiligen JavaScript-Code mit browser.ExecuteScript aufrufe.
Dann ist mir unklar, wie ich Variablen im JavaScript-Code per Delphi-Code ändere.

Daher noch einmal meine Frage nach einem Tutorial oder ähnlichem Erklärwerk.
Rüdiger Droste
  Mit Zitat antworten Zitat
Benutzerbild von gubbe
gubbe

Registriert seit: 8. Okt 2005
Ort: Schleswig-Holstein
150 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Auf website mit JavaScript kreierte Kästchen gezielt ankreuzen.

  Alt 16. Nov 2024, 12:57
Diese Fragen haben aber nichts mehr speziell mit den Themen Browser und JavaScript zu tun. Jetzt geht es eher um Strings in Delphi.

Ab Delphi 12 kannst Du einen Multiline-String direkt im Code schreiben.
Delphi-Quellcode:
code := '''
Zeile1
Zeile2
Zeile3
'''
Dann übergibst Du einfach "code" an Executescript. Alternativ lädst Du den Code aus einer Datei (mit TFile.ReadAllText) oder baust ihn zur Not in älteren Delphi-Versionen klassisch zusammen
Delphi-Quellcode:
code := 'Zeile1'#13#10 +
'Zeile2'#13#10 +
'Zeile3'#13#10;
Wobei #13#10 ein CR/LF also ein Zeilenumbruch unter Windows ist.

Wenn Du Werte an Javascript übergeben willst, baust Du sie einfach in den String ein.

Angenommen, Du hast ein Delphi-Array mit den Kästchen. Dann setzt Du im Javascript einen Platzhalter und ersetzt diesen durch Deine Werte.
Delphi-Quellcode:
var
  Kaestchen: array of string;
  Code: string;
begin
  // Dein Delphi-Array
  Kaestchen := ['2', '5', '8', '11', '14'];
  // Der Javascript-Code mit Platzhalter
  Code := 'let kaestchen = [%kaestchen%];';
  // Platzhalter ersetzen durch die Werte aus dem Delphi-Array
  Code := Code.Replace('%kaestchen%', String.Join(',', kaestchen));
  // Ergibt dann 'let kaestchen = [2,5,8,11,14];'; und kann an Executescript übergeben werden, um im Browser die Variable zu setzen
end;
Wie Du das genau machst, bleibt Dir überlassen. Die Idee ist einfach, den Javascript-Code in Delphi zusammenzubauen und mit ExecuteScript aufzurufen.
  Mit Zitat antworten Zitat
Benutzerbild von Rued
Rued

Registriert seit: 14. Mai 2008
Ort: Schleching
108 Beiträge
 
Delphi 12 Athens
 
#4

AW: Auf website mit JavaScript kreierte Kästchen gezielt ankreuzen.

  Alt 18. Nov 2024, 11:53
Beim Multiline-String erhalte ich Fehlermeldungen. Der Code "s:=..." beginnt in Zeile 160
Code:
var
s:string;
begin
s:= 'let kaestchen = [2,5,8,11];'+#13#10 +
'function ankreuzen(kaestchen, tippfeld) {' +#13#10 +
  'for (const element of kaestchen) {' +#13#10 +
    'document.querySelector('div#tip-field-' + tippfeld + ' div.box[data-value="' + element + '"]').classList.add('checked');' +#13#10 +
  '}' +#13#10 +
'}' +#13#10 +
'ankreuzen(kaestchen, 1);';

browser1.executeScript(s);
Die Fehlermeldungen:
[dcc32 Fehler] order.pas(163): E2026 Konstantenausdruck erwartet
[dcc32 Fehler] order.pas(163): E2029 Ausdruck erwartet, aber '.' gefunden
[dcc32 Fehler] order.pas(163): E2038 Ungültiges Zeichen in Eingabedatei: '"' (#$22)
[dcc32 Fehler] order.pas(163): E2038 Ungültiges Zeichen in Eingabedatei: '"' (#$22)
[dcc32 Fehler] order.pas(163): E2015 Operator ist auf diesen Operandentyp nicht anwendbar
[dcc32 Fehler] order.pas(166): E2014 Anweisung erforderlich, aber Ausdruck vom Typ 'string' gefunden
Rüdiger Droste
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#5

AW: Auf website mit JavaScript kreierte Kästchen gezielt ankreuzen.

  Alt 18. Nov 2024, 12:10
Du musst auch die einfachen Hochkommata im Javascript im Delphi-String verdoppeln. Ungetestet:
Delphi-Quellcode:
var
s:string;
begin
s:= 'let kaestchen = [2,5,8,11];'+#13#10 +
'function ankreuzen(kaestchen, tippfeld) {' +#13#10 +
  'for (const element of kaestchen) {' +#13#10 +
    'document.querySelector(''div#tip-field-'' + tippfeld + '' div.box[data-value="'' + element + ''"]'').classList.add(''checked'');' +#13#10 +
  '}' +#13#10 +
'}' +#13#10 +
'ankreuzen(kaestchen, 1);';
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Rued
Rued

Registriert seit: 14. Mai 2008
Ort: Schleching
108 Beiträge
 
Delphi 12 Athens
 
#6

AW: Auf website mit JavaScript kreierte Kästchen gezielt ankreuzen.

  Alt 20. Nov 2024, 12:22
gubbe, DeddyH jetzt klappt es, so dass ich weitertüfteln kann, wenn es mal wieder regnet. Im Moment feinstes Wetter in La Herradura.
Rüdiger Droste
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.343 Beiträge
 
Delphi 12 Athens
 
#7

AW: Auf website mit JavaScript kreierte Kästchen gezielt ankreuzen.

  Alt 18. Nov 2024, 14:26
Beim Multiline-String
DAS ist kein MultiLine-String.
Das sind mehrere aneinandergehänge, auf mehrere Zeilen verteilte, einzelne String-Konstanten.

Dieses ''' ist ein MultiLineString.
Code:
var
  s: string;
begin
  {$TEXTBLOCK LF JavaScript}  // damit vielleicht in 20 Jahren das ''' weiß, dass wie es den/die nachfolgenden Text(e) highlighten darf
  s := '''
    let kaestchen = [2,5,8,11];
    function ankreuzen(kaestchen, tippfeld) {
      for (const element of kaestchen) {
        document.querySelector('div#tip-field-' + tippfeld + ' div.box[data-value="' + element + '"]').classList.add('checked');
      }
    }
    ankreuzen(kaestchen, 1);
  ''';
(auch wenn der Highlighter in unserem Forum damit noch nichts anfangen kann)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (18. Nov 2024 um 14:33 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz