Span macht Absatz wieso?

Hallo Experten,

ich habe eine Seite wobei ein Code gut funktioniert. Die schwarze Linie des Spans steht genau neben den Satz und lest Wort für Wort.
http://www.bestaltmed.at/speedreading/indexx.php
Diese Funktion möchte ich hier einbauen:
http://www.bestaltmed.at/speedreading/index.php
Jedoch verschiebt sich die schwarze Linie des Spans um eine Zeile nach unten. Ich habe feststellen können, dass diese Verschiebung nach dem Absenden des Formulars stattfindet.
Kann aber nicht genau eruieren von wo dies Verschiebung kommt.

Hat dazu jemand eine Idee, wie man das Problem lösen kann?
Der Css Code ist gleich, der JS Code auch nur eine funktion changeText() ist dazugekommen.

Lg,
Chris

Hallo Chris,

da kann ich dir leider nicht weiterhelfen. Das debuggen deines codes musst Du selber machen.

mfg

Karim

Sorry, da kann ich nicht helfen. PHP ist nicht meine Welt …

Gruß, Sally

Auf der zweiten Seite funktioniert gar nichts, weil scheinbar jquery fehlt. Was ist eigentlich der Sinn dieser Seite?

Hallo Chris,

das liegt aller Wahrscheinlichkeit nach daran, dass das span-Element, dem Du die ID „toread“ gibst, gleichzeitig eine Inline-Style-Einstellung mit „display:block“ bekommt. Blockelemente nehmen immer den vollen möglichen Platz in der Zeile ein und dadurch wird alles andere nach unten verdrängt. Lass das display:block weg. Dann müsste es gehen.

Ansonsten mach Dir mal Gedanken über die beiden grundlegenden HTML-Elemente 1. „Blockelemente“ und 2. „Inlineelemente“. Wenn Du dessen „Rolle“ im HTML Baum nicht verstehst, dann kommst Du ständig auf solche Fehler!

Sonstiges: Stell Deinen Header bitte mal so ein, dass er als Zeichensatz UTF-8 verwendet, denn die Website wird im ISO dargestellt, wohingegen UTF-8 Zeichen darin vorhanden sind, was zu kryptischer Ausgabe führt. Sinvollerweise sendest Du vor der ersten Ausgabe in PHP noch einen hader() mit den richtigen Charset-Parametern (siehe google) und gleichzeitig solltest Du im HEAD der Seite eine Meta-Information ebenfalls mit dem korrekten Charset verwenden (ebenfalls siehe google).

Gruß
Tim

Hi Chris,

noch mal was anderes, es geht doch so viel einfacher!

Es wird ein Text eingegeben und gehen wir mal davon aus, dass dieser Text die Leerzeichen als Wort-Trennung hat. Dann kannst Du in PHP doch mittels $_WORDS = explode(" ", $_REQUEST[„input_text“]); Befehl die an das Script übergebene Zeichenkette in in ein Array von Wörtern überführen (Satzzeichen mal außen vor gelassen). Danach hast Du in $_WORDS ein Array bestimmter Länge:

$count_words = count($_WORDS);

und kannst mittels Schleifendurchlauf alle Wörter in ein einzelnes SPAN Element mit bekannter Klassenstruktur stecken:

foreach($_WORDS as $i => $word) {

$_OUTPUT[$i] = „“ . $word . „“;
}

und hast damit dann ein Array von in Span eingefassten Wörtern, die eine bestimmte Klasse haben und ebenso eine jeweilige ID nach dem Muster „word“

Das ganze gibst Du dann wieder aus, indem Du das Array in eine Zeichenkette zurück konvertierst:

echo implode(" ", $_OUTPUT);

Das Ergebnis sollte sein:

Hallo
Welt
Das
ist
ein
Text

Im JavaScript Teil nutzt Du dann jQuery, um den Selector zu berechnen (ggf. kann PHP die notwendigen Inrofmationen sogar schon in ein versecktes Formularfeld schreiben, weil die Infos ja eh im Array bekannt sind). Aber hier mal das JavaScript mit jQuery (angenommen, das Script hat anhand der Wort-Anzahl und der gewünschten Anzahl der Wörter pro Minute errechnet, man müsse eine Pause von vielleicht 900 Millisekunden machen):

last_selected_word = null;
var set_active_word = function() {

if(last_selected_word == null) {
$(’#word0’).addClass(‚is-active-word‘);
last_selected_word = 0;
setTimeout(‚last_selected_word()‘, 900);
} else {

$(’.is-active-word’).removeClass(‚is-active-word‘).addClass(‚is-read-word‘);
last_selected_word++;
$(’#word’ + last_selected_word).addClass(‚is-active-word‘);
}
}

Wenn Du dann noch eine Prüfung einbaust, dass das setTimeout wieder aufgelöst wird, wenn die Anzahl der Wörter erreicht ist, dann bist Du schon durch.

Die CSS Klassen „readable_words“, „is-active-word“ und „is-read-word“ kannst Du dann ja entsprechend der momentanen Formatierung umsetzen, wobei ich es persönlich besser fände, wenn einfach nur der Text ganz hellgrau würde. Sonst stört das dunkle Grau so stark!

Gruß Tim

Hallo Tim,

danke für die Info.
Das Skript wie es du machst macht auch Sinn. Das verwendete JS kann man jedoch einstellen mit den Pfeiltasten und dem Leerzeichen.

Daher macht es mehr Sinn JS zu verwenden oder?

Lg,
Chris

Hallo,

kannst du das Problem vielleicht durch Screenshots erläutern? In meinem Browser scheint sich das offenbar anders darzustellen, als du es beschreibst. Ich sehe z.B. keine schwarze Linie sondern nur Text, um den sich ein schwarzer Rahmen bewegt, sobald man auf „Show“ drückt. Der abgearbeitete Text wird dann dunkelgrau unterlegt, die Wörter im Rahmen sind grün mit hellgrauem Hintergrund.

– gelignite

Hallo Chris,

nun, das Zusammenspiel von PHP als Vorbereitung bzw. Entgegennahme der Daten (Eingabe von Text ins Formularfeld, Datei hochladen und auslesen etc.) wirst Du ja immer haben. Das JavaScript basierend auf jQuery, das ich Dir als Beispiel geschrieben habe, ist natürlich nicht in Stein gemeißelt und kann von Dir ja noch Deinen Bedürfnissen entsprechend angepasst werden. Die EventListener aus der „Original“-App können natürlich auch in Deine Version übernommen werden. Durch die global definierte JavaScript Variabel „last_selected_word“ weißt Du ja immer, welches das letzte markierte Wort ist und natürlich kannst Du da auch eine Pause machen oder die Schrittweite von Wortern definieren. Dich hindert ja niemand daran, z.B. eine Schrittweite festzulegen, die am Anfang standardmäßig auf 1 (also ein Wort) steht. Willst Du nun gleichzeitig mehrere Wörter markieren, dann programmierst Du es halt so, dass immer so viele Wörter als „gerade zu lesen“ markiert werden, wie die Schrittweite es vorgibt. Wenn z.B. gerade das letzte markierte Wort die ID 5 hat und immer drei Wörter markiert sein sollen, dann wäre der nächste Aufruf ja: Markiere die Wörter 6, 7 und 8 als „gerade zu lesen“ (nach meiner o.g. Terminologie: „is-active-word“).

Du brauchs also eine neue globale Variabel:

step_width = 1;

und dort, wo eigentlich ein Wort markiert wird, eine Schleife (z.B. step_width = 3)

for(var n = 1; n

sorry, ich verstehe das Problem nicht, das sieht doch alles völlig ok aus…
Gruß,
Thomas

Hallo Chris…! Danke für die Anfrage… Ich bin kein Experte um nun aus deiner Seite feststellen zu können wo sich der Fehler eingeschlichen hat. Da diese Seite ja auch ein PHP-Produkt von Dir ist, kann ich die Hintergrundscripte nicht erkennen. Ich brauche dazu das Script. Wenn Du kannst bzw. den Fehler selbst noch nicht gefunden hast, bitte ich Dich mal um das Script in Textform, so dass ich es mit meinem Editor öffnen kann.

Ach ja, bei mir scheint das Script über IE9 zu funktionieren. Der String (der Strich oder Span) springt bei mir nicht in die nächste Zeile… Vielleicht liegt das auch an deinen Hoster oder Browser…

Na, vielleicht kann ich das Problem aber besser finden wenn Du mir mal das Schript als txt zukommen lässt…
Ich warte dann mal auf deine Antwort.

Lieben Gruß MJE