# onchange="form.submit"



## Br4ve (21. Aug 2012)

Hallo,
ich habe eine Frage zu meinem Javascriptcode. Ich habe mir mittels Javascript 2 Dropdownmenüs gebaut, eins enthält 2 Datenbanken, wählt man eine Datenbank aus ändert sich das zweite Dropdownmenü mit den entsprechenden Optionen automatisch. Jetzt möchte ich allerdings wenn man im zweiten Dropdownmenü etwas auswählt, dass automatisch die Form submittet wird also meines Wissens im Prinzip onchange="form.submit". Allerdings scheint das nicht zu funktionieren.
Hier mein Code, der liegt teilweise in JSPs daher die out.println davor, ich hoffe ihr könnt es trotzdem nachvollziehen:
*Der Javascriptteil*

```
out.println("<script language='javascript'>");
		out.println("function setOptions(chosen) {");
		out.println("var selbox = document.myform.opttwo;");			 
		out.println("selbox.options.length = 0;");
		out.println("if (chosen == ' ') {");
		out.println("selbox.options[selbox.options.length] = " +
					"new Option('Bitte eine Datenbank auswählen',' ');");
			 
		out.println("}");
		out.println("if (chosen == '1') {");
			for(String s : datenbankZugriff.dbzugriff.anfrageTK("pcontrol_pcu_harsum")){
					out.println("selbox.options[selbox.options.length] = new");
					out.println("Option('"+s+"');");
					
			}
		out.println("}");
		out.println("if (chosen == '2') {");
		for(String s : datenbankZugriff.dbzugriff.anfrageTK("pcontrol_mnb1")){
					out.println("selbox.options[selbox.options.length] = new");
					out.println("Option('"+s+"');");
		}
	
		out.println("}");
		out.println("}");
		out.println("</script>");
```

*Der Html-Teil:*

```
out.println("<table border='0'><tr><td align='center'>PControl<br>%s&nbsp;%s</td><td>&nbsp;</td>");
    	out.println("<form name='myform' action='mitte.jsp' target='frame2'><div align='center'><td>");
    	out.println("<select name='optone' value='optone' size='1'");
    	out.println("onchange='setOptions(document.myform.optone.options [document.myform.optone.selectedIndex].value);'>");
    	out.println("<option value=' ' selected='selected'> </option>");
    	out.println("<option value='1'>Pcontrol_pcu_harsum</option>");
    	out.println("<option value='2'>Pcontrol_mnb1</option>");
    	out.println("</select></td>");
    	
    	
   
		out.println("<td>&nbsp;</td><td>&nbsp;</td>");
		
		out.println("<td><select name='opttwo' value='opttwo' size='1' onchange='myform.submit()>");
		out.println("<option value=' ' selected='selected'>Bitte Datenbank auswählen</option>");
		out.println("</select></td>");
		out.println("</div></form>");
```

"optone" ist also das erste Dropdownmenü, wo man die Datenbanken auswählt. "opttwo" ist das zweite was die Form submitten soll, auslesen möchte ich allerdings beide. Ist es richtig, dass ich in Zeile 14 des Html-Teils dann "myform.submit()" aufrufe? Ich kenne mich leider mit Javascript kaum aus....


----------



## Evil-Devil (21. Aug 2012)

Das submitten des Formulars kannst du aus deinem Formular Feld über *this.form.submit()* realisieren. Um es über den Namen anzusprechen müsstest du *document.myform.submit* bzw. *document.forms['myform'].submit()* aufrufen. Bin mir bei den letzteren beiden nicht ganz sicher. Ich verwende nach Möglichkeit immer die erstere Variante oder habe eine extra Callback Funktion die eine Referenz auf das Formular hält und sich um alles kümmert.

Bekommst du denn irgendwelche JS Fehlermeldungen in deinem Debugger angezeigt? Das kann ja bereits ein Grund sein warum es nicht funktioniert.


----------



## nillehammer (21. Aug 2012)

Du brauchst für Dein Forumlar ein id-Attribut. Ändere Deinen Code wie folgt:

```
out.println("<form name='myform' id="myform" action='mitte.jsp' target='frame2'>
```
Außerdem brauchst Du out.println eigentlich nur (wenn überhaupt) in Servlets. In JSPs kannst Du die Tags einfach hinschreiben.


----------



## Br4ve (21. Aug 2012)

Danke, also mit this.form.submit() hatte ich es auch schon probiert. Funktionierte leider auch nicht.
Ich weiß nur dass es wohl nicht richtig submittet wird weil ich in einer anderen JSP die Paramter auslese.

```
<body bgcolor="#d9d0c1">
<table width="100%"><tr><td align="center">

PControl viewer 
</td></tr></table>
<%String name = null;
int pgid = 0;

String db = "pcontrol_pcu_harsum";
db = request.getParameter("optone");
System.out.println("HIER DATENBANK:  "+db);
%>
<%

if(request.getParameter("opttwo") != null){
name = request.getParameter("opttwo");
String[] arr = name.split(" ");
String tmp = arr[0];
System.out.println("HIER DER PARAMETER:   "+tmp);
pgid = Integer.parseInt(tmp);
}else{

}



%>
<matrix:mitte2 pgid="<%=pgid%>" db="<%=db%>"></matrix:mitte2>

</body>
```

Allerdings wird bei den Datenbanken immer null ausgegeben und der zweite sysout wird dementsprechend garnicht erreicht...
Edit: Aber der onchange-Befehl bleibt dann onchange="this.form.submit()"?


----------



## Br4ve (21. Aug 2012)

Aucht mit dem ID-Attribut funktioniert es leider noch nicht.


----------



## Br4ve (21. Aug 2012)

Falls es jemanden intressiert, der Fehler lag in einem fehlenen ' hinter dem this.form.submit() -.- 4 std hat mich dieses verdammte Hochkommata gekostet.


----------

