Form submit funktioniert nicht

HuRaHoRRe

Erfahrenes Mitglied
Hi

Ich habe ein Problem mit meiner Suchfunktion.
Mit Hilfe von Javascript und den Formulardaten wird die action des Formulars angepasst, danach sollte es abschickt werden.

Doch nun gibt mir die Fehlerkonsole immer folgenden Fehler aus:
Code:
Fehler: domForm.submit is not a function
Quelldatei: http://localhost:8180/author/docroot/aseintra/js/search.js
Zeile: 28

Ich habe bereits mehrere Stunden gesucht, aber auf vielen Seiten werden nur Probleme wegen eines Elements mit dem Namen "submit" geschildert...
Bei mir hat kein Element diesen Namen.

Hier das Formular:

HTML:
<jsp:root version="1.2"	xmlns:jsp="http://java.sun.com/JSP/Page"
	xmlns:fn="urn:jsptld:http://java.sun.com/jsp/jstl/functions">

	<div id="searchBoxMain">
		<form method="post" id="searchForm" name="searchForm" action="javascript:submitSearchForm(document.getElementById('searchForm'), 'radio');">
          <table cellspacing="0" cellpadding="0">
          <tr>
            <td>
              <label for="query">Such<u>e</u>n: </label>
            </td>
            <td>
    				<input size="27" id="query" name="query" value="${fn:escapeXml(param.query)}" accesskey="e" />			
            </td>
          </tr>
          <tr>
            <td>
            </td>
            <td colspan="2">
            <input type="radio" name="repository" id="repository" value="site" />Intranet
    				<input type="radio" name="repository" id="repository" value="phonebook" checked="checked"/>Telefon
    				</td>
          <td>
            <input type="submit" name="search" value="Los" />
          </td>
          </tr>
          </table>
		</form>
	</div>
</jsp:root>

und hier das Javascript:

Code:
/**
* Verarbeitungsfunktion fuer Suchformular.
*/
/**
* Passt den Action-Path des Suchformulars an.
* @param form Formular Objekt (DOM-Element)
* @return void
*/
function submitSearchForm(domForm, type) {
  var domSelectRepository = document.getElementById('repository');
	var repository = domSelectRepository.value;
	var domInputQuery = document.getElementById('query');
	var query = domInputQuery.value;
	var checked = domInputQuery.checked;
	if(type == 'radio')
	{
    var chosen = GetSelectedItem();
  }else{
    var chosen = repository;
  }
	switch(chosen) {
		case 'phonebook':
			window.open('http://localhost:8180/apps/telefonverz/small_telefonverz.php?telid=' + query, '_self');
			break;
		case 'site':
			domForm.action = '/' + getContextPath() + 'Intranet/search.html?search=search';
			domForm.submit();
			break;
		case 'problem':
			domForm.action = '/' + getContextPath() + 'Intranet/problemSearch.html?search=search';
			domForm.submit();
			break;
	}
}

/**
* Gibt den per radio Button ausgewählten Wert zurück.
* @return chosen
*/
function GetSelectedItem() {

chosen = ""
len = document.searchForm.repository.length

  for (i = 0; i <len; i++) {
    if (document.searchForm.repository[i].checked) {
    chosen = document.searchForm.repository[i].value
    }
  }  
  return chosen;
}
/**
* Gibt den Servlet-Context-Path zurueck.
* @return Servlet-Context-Path
*/
function getContextPath() {
	var contextPath = location.href;
	contextPath = contextPath.substr(7);
	contextPath = contextPath.substr(contextPath.indexOf('/')+1);
	contextPath = contextPath.substr(0, contextPath.indexOf('/')+1);
	return contextPath;
}

Vielen Dank im voraus!
 
Hi,

ich bin mir nicht 100%ig sicher, aber es könnte daran liegen, dass du das JavaScript im Action-Attribut aufrufst.

Versuch mal dein Formtag wie folgt aufzubauen:

HTML:
<form method="post" id="searchForm" name="searchForm" action="">

und dann deinen Submit-Button so:
HTML:
<input type="button" name="search" value="Los" onClick="javascript:submitSearchForm(document.getElementById('searchForm'), 'radio');" />

Ich denke, so sollte es dann gehen!

Viele Grüße,
BigManu
 
Vielen Dank für die schnelle Antwort!

Leider brachte die Änderung nicht den gewünschten Effekt, es wird der selbe Fehler ausgegeben.
Ausserdem habe ich auch schon forms mit dem js im action gemacht, die haben immer Funktioniert.

Das Javascript wird ja auch aufgerufen, also sollte dies kein Problem sein.
 
Hm..., ok...
Ich hatte schon mal ein ähnliches Problem, komme nur gerade nicht mehr drauf, wie ich das damals lösen konnte, bzw. woran es lag.
Versuche mal in der form an Stelle von document.getElementById('searchForm') einfach this zu übergeben.
 
mhhh nutzt leider auch nix :(
Interessant ist ja, dass ich auf die Elemente zugreifen kann, ich kann ja action mit domForm.action = ... ändern.
Nur wieso das submit nicht geht ist mir ein Rätsel :confused:
 
Ist es evtl. möglich, dass der JSP-Compiler da ein Hiddenfeld namens submit automatisch erzeugt? Ich hatte damals das Problem zwar nicht mit JSP, aber ich arbeite mich seit kurzem in JSF ein und da gab es ähnliche Phänomene...
 
Hi,

dann zeig doch mal den fertig generierten Quellcode. Vielleicht ist dort mehr zu erkennen. Denn mit den von dir geposteten Codefragmenten funktioniert es bei mir problemlos.

Ciao
Quaese
 
Ich kann nichts ungewöhnliches erkennen aber hier:
HTML:
<form action="javascript:submitSearchForm(document.getElementById('searchForm'), 'radio');" name="searchForm" id="searchForm" method="post">
              <table cellpadding="0" cellspacing="0">
                <tr>
                  <td>
                    <label for="query">
                      Such
                      <u>e</u>
                      n: 
                    </label></td>
                  <td>
                    <input accesskey="e" value="" name="query" id="query" size="27"/></td>
                  <td>
                    <input value="Los" name="search" type="submit"/></td>
                </tr>
                <tr>
                  <td/>
                  <td colspan="2">
                    <input value="site" id="repository" name="repository" type="radio"/> Intranet
                    <input checked="checked" value="phonebook" id="repository" name="repository" type="radio"/> Telefon</td>
                </tr>
              </table>
            </form>
 
Hi,

an dem Teil scheint es nicht zu liegen. Du hast dort zwar die ID repository zweimal verwendet - IDs müssen jedoch eindeutig sein. Aber da du den Zweig mit den Radiobuttons benutzt, sollte es dennoch funktionieren.

Das Problem muss also irgendwo anders im Quellcode verborgen liegen. Es wäre also sinnvoll mehr Informationen zu zeigen, am besten den kompletten fertig generierten Quellcode.

Ciao
Quaese
 

Neue Beiträge

Zurück