# Wert einer Methode ..onClick="xy();" aus Function ändern.



## tuxx (27. August 2003)

Ich habe diesen Schnipsel:


```
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
 <head>
  <title>Test</title>
   <script language="JavaScript1.2" type="text/javascript"><!--
    function start(){
     document.form.button. = stop();
     blabla.....
    }
    function stop(){
     document.form.button. = start();
     blabla.....
    }
  //--></script>
  </head>
  <body>		
   <form name="form">
     <input type="button" id="knopf" name="knopf" onClick="start();>Start
   </form>
  </body>
</html>
```

und möchte nun aus den Functionen "start();" und "stop();" heraus dem Button "knopf" eine andere "onClick=xyz();" - value zuweisen.
Geht das? 
Wie? 
Ich möchte allerdings nicht den Umweg über einen clickhandler nehmen.


----------



## Andreas Gaisbauer (27. August 2003)

Sorry, komm nicht ganz mit. Willst du:

1) onClick die Funktion Start() aufrufen und dann bei jedem weiteren Aufruf eine andere Funktion?

2)  bei onClick start aufrufen, aber ohne "onClick" zi verwenden?

3)  oder ganz was anderes? 

Ich denke mal, du willst 3) - erklärs mir dann bitte nochmal, steh grad voll auf der Leitung...

bye


----------



## tuxx (27. August 2003)

Der Button hat standardmässig für onClick="" den Wert start();
Nun soll aber die Function start(); als erstes die Methode, die onClick aufruft in stop(); ändern. Also ein Start-Stop-Knopf.
Hab mir schon nen Wolf gesucht, aber ausser value usw. (also Eigenschaften) ändern für einen Knopf nix gefunden.

Also hätt ich gern Variante 1.

Wenns geht halt ohne nen event- bzw. clickhandler.


----------



## Andreas Gaisbauer (27. August 2003)

Hi,

ich denke das lässt sich am besten über eine Globale Variable lösen.

```
<html>
<head>
  <script type="text/javascript">
     var status = 0;

     function startStop(){
        if(status==0){
          start();
          document.form.knopf.value="stop";
          status=1;
        }
        else{
           stop();
           document.form.knopf.value="start";
           status=0;
       }
    }
  </script>
</head>
<body>
    <form name="form">
       <input type="button" id="knopf" name="knopf" onClick="startStop();">Start
</form>
</body>
</html>
```

kommt das hin?

bye


----------



## tuxx (27. August 2003)

Das hab ich als erstes gedacht.
Du änderst damit aber die "value" also die Beschriftung vom Knopf.
Nicht die Function, die er auslöst.
Und die Abfrage nach der value ist zu langsam.
Da kommst du nicht in der Ausführung dazwischen, wenn die Function da 60 Bilder oder so abspielt.
Denke, ich komme doch nicht um den eventHandler() drumrum.


----------



## Andreas Gaisbauer (27. August 2003)

Hallo,

die Beschriftung des Buttons zu ändern  war hier ja nur "Bonus". Du clickst -> rufst start() auf -> setzt Status!=0 -> beim nächsten Click wird stop() aufgerufen ->  setzt Status!=1 ->  beim nächsten Click wird start() aufgerufen ... and so on...  Ich denke da sollte es keine Geschwindigkeitsprobleme  geben - ansosten häng mal das ganze Problem an, vielleicht fällt  jemanden noch was anderes ein, wenn man es "live" sieht...

bye


----------



## Fabian H (27. August 2003)

Wenn du immer asl letztes von den drei Zeilen die Funktion start/stop machst?

Du könntest es übrigens auch anders machen:

```
<script type="text/javascript">
var todo = "start();"

function start() {
    window.butform.but.value=" Stop ";
    todo = "stop();";
   // Mach was
}

function stop() {
    window.butform.but.value=" Start ";
    todo = "start();";
   // Mach was
}

</script>

[...]

<form name="butform">
    <input type="button" name="but" value=" Start " onClick="eval(todo);">
</form>
```

Oder so (ich weis allerdings nicht genau, was du mit "60 Bilder anspielen" meinst? Eine Slideshow?

```
<script type="text/javascript">
var doplay = 0;

function start() {
    window.document.getElementById("BeispielBild").src = "bild"
        +Math.round(Math.random*60))."jpeg";
    if (doplay == 1) {
        setTimeout("start();", 2000);
    }
}

function startstop() {
    if (doplay == 0) {
        window.document.butform.but.value = " Stop ";
        doplay = 1;
        start();
    } else {
        window.document.butform.value = " Start " ;
        doplay = 0;
    }
}
</script>

[...]

<forn name="butform">
    <input type="button" value=" Start " onClick="startstop();" name="but">
</form>
```


----------



## tuxx (27. August 2003)

*Genau, für ne Show.*

Super deine Idee.

Läuft nur leider nicht.
Vielleicht, weil ich die Form samt buttons über JS erzeuge.
Danke trotzdem.


----------



## Fabian H (27. August 2003)

Was genau funktioniert denn nicht?


----------



## tuxx (27. August 2003)

eval(testvar) wird nicht durch onClick ausgeführt.


----------



## tuxx (27. August 2003)

Die Seite sieht so aus:

```
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
	<head>
		<title>Gallery</title>
		<base target="main">
		<link href="common.css" rel="stylesheet" media="screen" type="text/css">
		<meta name="ROBOTS" CONTENT="index, follow, noarchive">
		<script language="JavaScript1.2" src="./adresse.js"></script>
		<script>
		<!--

		//-->
		</script>
		<script language="JavaScript1.2" src="./gallery.js"></script>
		<style>
		<!--
			#bildzaehler {
				font: normal lighter 20pt "Verdana, Arial, Courier";
				color: red;
			}
			#hinweis {
				font: small-caps lighter 12pt "Verdana, Arial, Courier";
				color: blue;
			}
		//-->
		</style>		
	</head>
	<body onLoad="goPix();">
		<script language="JavaScript1.2"> 
		<!--
		this.document.writeln("<table height=80% width=80% align=center valign=middle><tr><td colspan=2 align=center valign=middle><font id=bildzaehler><div>Bild 1<\/div><\/font><\/td><\/tr><tr><td colspan=2 align=center valign=bottom><font id=hinweis>Bl&auml;ttern<\/font><\/td><\/tr><tr align=center valign=top><td align=center valign=top><input type=button value=prev onClick=zurueck(); width=40><\/td><td align=center valign=top><input type=button value=next onClick=weiter(); width=40><\/td><\/tr><tr><td align=center valign=bottom colspan=2><form name=form1 action=''><input type=button name=zone id=zone value='Diashow' onClick=show();><\/form><\/td><\/tr><\/table>");
		//-->
		</script>
	</body>
</html>
```

Die jsdatei:


```
var maxzahl = 62;
var fadespeed = 10;
var showtime = 1000000;
var test = "show();";
var picnr = 1;
var anzeige = "Bild " + picnr + "/" + maxzahl;
var bildnun = "./bild/bild" + picnr + ".jpg";
var stop = "Wait";
var start = "Diashow";
var fensterbreite = parent.window.innerWidth;
var fensterhoehe = parent.window.innerHeight;
var bildbreite = fensterbreite * 0.64;
var bildhoehe = fensterhoehe * 0.76;
									
parent.frames[3].document.write('<body BGCOLOR="#FFFFFF"><table height=80% width=80% align=center valign=middle><tr align=center valign=middle><td align=center valign=middle><center><img src=./bild/bild1.jpg id=bild style=align:center;valign:middle;><\/center><\/td><\/tr><\/table><\/body>');

function show(){
	document.form1.zone.value = stop;
	test = "stopshow();";
	var geht = window.setInterval("diashow()", 4000);
}

function stopshow(){
	document.form1.zone.value = start;
	test = "show();";
	window.clearInterval(geht); 
}

function weiter(){
	picnr++;
	goPix();
}

function zurueck(){
	picnr--;
	goPix();
}

function goPix(){
	check();
	anzeigen();
	quellenbauen();
	bildanpassen();
}

function diashow(){
	if (picnr >= maxzahl){ stopshow(); }
		picnr++;
		goPix();
}

function check(){
	if (picnr == 0){ picnr = maxzahl; }
	if (picnr > maxzahl){ picnr = 1; }
}

function anzeigen(){
	anzeige = "Bild " + picnr + " / " + maxzahl;
	parent.frames[1].document.getElementsByTagName("div")[0].firstChild.data = anzeige;
}

function quellenbauen(){			
	bildnun = "./bild/bild" + picnr + ".jpg";
	parent.frames[3].document.images[0].src = bildnun;
}

function bildanpassen(){
	parent.frames[3].document.images[0].height = bildhoehe;
}

function blende(){
	for (var t = bildhoehe; t > 1; --t){					
		for (var w = 1; w < fadespeed; ++w){						
			parent.frames[3].document.images[0].height = t;							
		}						
	}
}
```

 ja auch prima, nur stoppen lässt sichs net.


----------



## tuxx (27. August 2003)

*Habs!*

Dank euch beiden!

Klappt! War nur ne Sache der Kommentierung mit eval(test);


----------



## Fabian H (28. August 2003)

Kleiner Tipp: die slashes / musst du afaik in JS niccht escapen!


----------



## tuxx (28. August 2003)

Stimmt, ist optional.
Hab ich mir mal der Kompatibilität wegen angewöhnt.
In diversen Referenzen wurde es empfohlen, hab mal drauf
umgeschwenkt.
;-)


----------

