thema wehseln mit getElemantById

Mmmmh...so recht werd ich auch nicht schlau aus dem Ganzen... da Datic grad im Urlaub ist, nehm ich mich mal der Sache an(bzw. versuche dies).

Du hast also ein Registrierungsfrmular... nach der Registrierung gehts zu einem Button weiter, und danach zum Test.
das geht ja alles ohne Javascript

Dann der Test. Da dürfte sich ein Formular anbieten... was dann zum Speichern gesendet wird.
Wie genau das aussehen könnte, hängt von dem Test ab. Sinnvoll wäre z.B. ein verstecktes Formularfeld... worin du speicherst, an welcher Stelle des Tests man sich grad befindet.
Und natürlich ein Submit-Button zum manuellen Speichern.

Um jetzt nach einer bestimmten Zeit automatisch zu speichern, wende die Methode submit() auf das Formular an... diese bewirkt das Senden eines Formulars.
Um dies nach dem Ablauf einer bestimmten Zeit zu tun, verwende das von dir bereits erwähnte "setTimeout()"...
Code:
window.setTimeout('document.nameDesFormulars.submit()',30000);
Würde bspw. nach 30 Sekunden das Formular automatisch senden.

Für den Admin-Link brauchst du wiederum kein Javascript.... da genügt ein normaler Link zu einem serverseitigen Skript, welches dir die Möglichkeit gibt, zu tun, was du möchtest.
 
Hallo Sven,

danke das du dich der Sache annimmst.

wie kann ich denn auf das array zugreifen?

Code:
var zeiten = new Array(0, 2000, 1000, 3000, 2000, 2000,2000);

ich hab diesen ansatz nur wie sage ich ihm jetzt das er das den Arraybereich so ändern soll? Und wie mach ich die Änderung dauerhaft? :rolleyes:

Code:
<input type="text" name="zeiten[1]" size="12"><input type="submit" value="ändern"></form></div>

Dann der Test. Da dürfte sich ein Formular anbieten... was dann zum Speichern gesendet wird. // ja das wollte ich so machen

Wie genau das aussehen könnte, hängt von dem Test ab. Sinnvoll wäre z.B. ein verstecktes Formularfeld... worin du speicherst, an welcher Stelle des Tests man sich grad befindet. // sorry wozu soll das denn jetzt genau dienen?

Und natürlich ein Submit-Button zum manuellen Speichern. // ok


mit freundlichen Grüßen

rotmilan
 
wie kann ich denn auf das array zugreifen?
über den Index der Array-Elemente...

zeiten[0]=erstes Element(0)
zeiten[1]=zweites Element(2000)
usw.


ich hab diesen ansatz nur wie sage ich ihm jetzt das er das den Arraybereich so ändern soll? Und wie mach ich die Änderung dauerhaft? :rolleyes:
... das ist ein Javascript-Array... den kannst du nur in Javascript verwenden, und nicht in bspw. HTML-Attributen(es seih denn, du änderst diese Attribute per Javascript)
Was du mit "dauerhaft ändern" meinst, kann ich nur erahnen....
falls du meinst, du möchtest ihn über dein "Admin"-Skript ändern, dann könnest du z.B. serverseitig die Datei umschreiben(mit PHP oder einer sonstigen serverseitigen Sprache).

Mit Javascript selbst läuft da nix.... sobald eine Seite weg ist, sind auch alle Javascript-Variablen hinfällig.

Wie genau das aussehen könnte, hängt von dem Test ab. Sinnvoll wäre z.B. ein verstecktes Formularfeld... worin du speicherst, an welcher Stelle des Tests man sich grad befindet. // sorry wozu soll das denn jetzt genau dienen?
Na du hast einen Test mit mehreren Abschnitten... wenn eine Testabschnitt bewältigt wurde, kannst du so ermitteln, welcher als Nächstes dran ist... oder wie hattest du das vor zu tun?
 
hi,


... das ist ein Javascript-Array... den kannst du nur in Javascript verwenden, und nicht in bspw. HTML-Attributen(es seih denn, du änderst diese Attribute per Javascript)

ok also ist es möglich über php den arrayindex in javascript zu ändern
ich muss denn elemente-variablen dann wohl in php noch mal definieren um sie da dauerhaft zu ändern. ist das so möglich?

Was du mit "dauerhaft ändern" meinst, kann ich nur erahnen....
falls du meinst, du möchtest ihn über dein "Admin"-Skript ändern, dann könnest du z.B. serverseitig die Datei umschreiben(mit PHP oder einer sonstigen serverseitigen Sprache).

ja mit php kenn ich mich etwas aus, das muss ich dann wohl so machen.

Na du hast einen Test mit mehreren Abschnitten... wenn eine Testabschnitt bewältigt wurde, kannst du so ermitteln, welcher als Nächstes dran ist... oder wie hattest du das vor zu tun?

naja meine überlegung was diese für jeden abschnitt ein submitbutton der eine query losschickt oder halt diese query automatisch falls die zeit um ist.
für jeden abschnitt eine query, falls sich das mit deiner methode besser machen lässt wäre ich sehr dankbar wenn du sie mir noch etwas näher legen könntest.

mit guten gruß rotmilan
__________________
 
Wozu willst du die ganze Zeit den Javascript-Array ändern?
Wozu soll der übehaupt sein:confused:

Man befindet sich in einem Abschnitt des Tests....die Aufgabenstellung und die Verweildauer speichere serverseitig.... jeweils für jeden Abschnitt des Tests(kannst du dann über deinen Admin-Link ändern, falls dir danach ist)

Testaufgabe1:
Du gibts mit PHP die Aufgabenstellung aus und Formularelement(e), in denen man die Lösung eintragen kann, zusätzlich den Submitbutton und das erwähnte versteckte Feld.

Dieses Formular wird durch den User oder per JS automatisch gesendet. Wenn es gesendet wurde, speicherst du die Lösung des Users(wo, bleibt dir überlassen).....dann gehts weiter zu Aufgabe 2...gleiches Spiel von vorne, bis alle Aufgaben durch sind.

Du brauchst also keinen Javascript-Array, sondern höchstens einen PHP-Array, in welchem du Aufgaben und Dauer speicherst.
Da der User jeweils nur 1 Aufgabe löst, brauchst du in Punkto Javascript jeweils nur eine Sache.... die zulässige Zeit zur Lösung der Aufgabe.


Im Übrigen wäre es schön, wenn du die Netiquette#12 beachten würdest, diese existiert nicht ohne Grund. Es macht wenig Freude, wenn man deine Postings erst 5 mal lesen muss, um den Sinn zu erfassen.
Wenn du jemanden zitierst, benutze bitte die quote-Tags, dazu sind sie da.
Danke.
 
Hallo,

@Sven, entschuldige bitte meine wüste Schreibweise. Ich musste grad selber feststellen das ich damit nur schlecht klarkomme, außer dem die späte Antwort.

Ich möchte die Funktion optimieren.

Die Zeit wird bei dem letzten div wohl nicht mehr runtergezählt.
Der submit nach Zeitablauf funktioniert zwar aber es wäre gut wenn auch beim letzten div der countdown funktionieren würde.

ich denke wenn if (current == cookdaten.length) eintrifft wird das nächste if ausgelassen

Ich würde es auch gern so versuchen, klappt aber noch nicht.

if( current == cookdaten.lengh && intMsecs == 1000) objForm.submit();


HTML:
if(r)
        {
            if(intMSecs >= 1000)
                {
                    intMSecs  -= 1000;
                    objTimeout = window.setTimeout('next_one(1)', 1000);
                }
             else
               
                    objTimeout = window.setTimeout('next_one(0)', 1);
             
        }
        
    else if(current < cookdaten.length)
        {
            objForm.getElementsByTagName('div')[current].style.display = 'none';
            current++;
            objForm.getElementsByTagName('div')[current].style.display = 'block';
            intMSecs = cookdaten[current];
            objTimeout = window.setTimeout('next_one(1)',1000);

            if(current == cookdaten.length)          // ich denke wenn er hier reinspringt wird 
                                                               die nächste if nicht mehr berücksichtigt oder ?
            {
               objForm.but.disabled = true;
               window.setTimeout('objForm.submit()',3000);       
           }
        }
								 
     if(intMSecs > 20000)
	{
                objForm.getElementsByTagName('Span')[0].firstChild.nodeValue = '';
	}
	else
	{
        objForm.getElementsByTagName('SPAN')[0].firstChild.nodeValue =
       (current==cookdaten.length)? '': ' noch '+intMSecs/1000+ ' Sekunden';
    }
		
}


mit freundlichen Gruß

rotmilan
 
Hallo,

die Annahme das ein if ausgelassen wird is wohl qutsch.

Auch wenn ich den block if(current == cookdaten.length){}
total ausklammer wird für das thema die Zeit nicht runtergerechnet.

Es sind 16 Zeitangaben im Array cookdaten vorhanden!

Hier nochmal die Funktion komplett:

HTML:
<script type="text/javascript">
<!--

function next_one(r)
{
    objForm = document.forms[0];
    if(!document.getElementById) return;  
    if(current <= cookdaten.length)clearTimeout(objTimeout); 
        
    if(r)
        {
            if(intMSecs >= 1000)
                {
                    intMSecs  -= 1000;
                    objTimeout = window.setTimeout('next_one(1)', 1000);
                }
             else
               
                    objTimeout = window.setTimeout('next_one(0)', 1);
             
        }
        
    else if(current < cookdaten.length)
        {
            objForm.getElementsByTagName('div')[current].style.display = 'none';
            current++;
            objForm.getElementsByTagName('div')[current].style.display = 'block';
            intMSecs = cookdaten[current];
            objTimeout = window.setTimeout('next_one(1)',1000);
            //if(current == cookdaten.length && intMSecs == 1000){
            //objForm.submit(); 
            //window.setTimeout('objForm.submit()',20000);
           //}
       }
								 
	if(intMSecs > 20000)
	{
                    objForm.getElementsByTagName('Span')[0].firstChild.nodeValue = '';
	}
	else
	{
                     objForm.getElementsByTagName('SPAN')[0].firstChild.nodeValue =
                     (current==cookdaten.length)? '': ' noch '+intMSecs/1000+ ' Sekunden';
                }
		
       }
       current    = 0;
       cookdaten  = new Array(<?echo implode(',',array_slice($cook_daten,0,15))?>);
       intMSecs   = cookdaten[0];
       objTimeout = window.setTimeout('next_one(true)',1000);
	
//-->
</script>

mfg rotmilan
 
Zurück