WinFuture-Forum.de: [ajax] Funktion In Nachgeladenem Inhalt - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

[ajax] Funktion In Nachgeladenem Inhalt ... wird nicht gefunden


#1 Mitglied ist offline   Matze 

  • Gruppe: aktive Mitglieder
  • Beiträge: 666
  • Beigetreten: 29. Februar 04
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 08. Oktober 2008 - 16:47

Hallo,

ich habe eine Seite, die eine Registerkartenansicht beinhaltet, mit der verschiedene Formulare dynamisch nachgeladen werden. Je nach gewählter Registerkarte. Das Nachladen an sich funktioniert auch problemlos. Ich habe aber in meinen nachgeladenen Formularen ein onSubmit="doSend();" stehen, weil ich die Formulare auch mit Ajax versenden möchte.
Leider wird die Funktion nicht aufgerufen und stattdessen ein Fehler in der Konsole angezeigt:
Fehler: doSend is not a function

Das Problem wird wohl sein, dass mein nachgeladenes Formular die JavaScript-Datei nicht kennt, in der die Funktion definiert ist. Der Hauptseite ist die Funktion bekannt, nur der nachgeladenen nicht. Was muss ich denn machen, damit der sie kennt? Habe hier zwar schon ein wenig mit eval() herumprobiert, das scheint aber irgendwie nicht die Lösung zu sein, jedenfalls geht's so auch nicht ...
Lorem ipsum dolor sit amet, consetetur sadipscing elitr.
0

Anzeige



#2 Mitglied ist offline   [Elite-|-Killer] 

  • Gruppe: aktive Mitglieder
  • Beiträge: 762
  • Beigetreten: 02. Oktober 05
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Passau

geschrieben 08. Oktober 2008 - 17:00

Wenn du Daten nachlädst (JSON, XML, Text, wahtever) und kein JavaScript (also das wird beim Laden der Seite bereits ausgegeben) so kannst du natürlich durch das Formular HTML auf die Funktionen zugreifen die im JavaScript der ursprünglichen Seite definiert sind. Aber etwas mehr Code der Seite würde zur Problemlösung sicher beitragen.
0

#3 Mitglied ist offline   zwutz 

  • Gruppe: aktive Mitglieder
  • Beiträge: 659
  • Beigetreten: 17. Juli 07
  • Reputation: 1
  • Geschlecht:Männlich

geschrieben 08. Oktober 2008 - 17:01

was genau lädst du denn nach? Nur das Formular (<form></form>) oder eine ganze Seite (<html></html>)
Raise your glass if you are wrong
0

#4 Mitglied ist offline   Matze 

  • Gruppe: aktive Mitglieder
  • Beiträge: 666
  • Beigetreten: 29. Februar 04
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 08. Oktober 2008 - 17:58

Hier ein wenig Quelltext. Habe mal nur die relevanten Sachen herausgegriffen.

Hauptseite:
 ...
<head> ...
		<script type="text/javascript" src="js/dojo.js" ></script>
	<script type="text/javascript" src="js/generic.js" ></script> ...
</head>
<body onload="setView('form1');">
...
			  <div class="title">
				  <a id="vform1" class="titleActive" href="#" onclick="return setView('form1');">
				{TRANS:0}</a>
				  <a id="vform2" class="title" href="#" onclick="return setView('form2');">
				{TRANS:1}</a>
			</div>
		
			<div id="view">
						  <noscript><p>{TRANS:4}</p></noscript>
			</div>
...


Nur falls es wichtig sein sollte: ich benutze das Dojo-Framework zum Senden der Requests (dojo.js). In der generic.js ist die setView so definiert:
function setView(view){
	v.oldView = v.newView;
	v.newView = view;
	
	var viewHandle = function(){
		dojo.xhrGet({
			url: "view.php?v=" + view,
			handleAs: "text",
			handle: function(data, args){
				if(typeof data != "error"){
					dojo.byId("view").innerHTML = data;
					if(v.oldView != null)
						dojo.byId('v' + v.oldView).className = 'title';
					dojo.byId('v' + v.newView).className = 'titleActive';

				}
			}
		});
	};
	dojo.addOnLoad(viewHandle);
}


Die view.php liefert z.B. folgendes zurück und das Ergebnis wird auch im Container dargestellt:
<form class="centered" id="alForm" method="post" action="#" accept-charset="UTF-8" onsubmit="doSend();">
  <div class="alt1">
	<textarea id="logbox" name="logfile" cols="75" rows="15" class="bigTextBox"></textarea>
  </div>
  <div class="alt1">
	<input id="btnSend" name="send" type="submit" value="{TRANS:5}" />
  </div>
</form>

Also wirklich nur das reine form-Tag und keine ganze HTML-Seite.

Das Problem ist nun die Funktion doSend(). Die steht auch in der generic.js, wird aber nicht gefunden. Wenn ich auf den absenden-Button im nachgeladenen Formular klicke, sollte sie ja eigentlich aufgerufen werden. Es kommt aber dieser "is not a function" Fehler.

Dieser Beitrag wurde von Matze bearbeitet: 08. Oktober 2008 - 17:59

Lorem ipsum dolor sit amet, consetetur sadipscing elitr.
0

#5 Mitglied ist offline   Matze 

  • Gruppe: aktive Mitglieder
  • Beiträge: 666
  • Beigetreten: 29. Februar 04
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 12. Oktober 2008 - 11:07

Ich habe das Problem jetzt gelöst, indem ich dem Button ein onclick="doSend();" gegeben habe und das gesamte Formular-Tag herausgenommen habe.
<div class="centered">
  <div class="alt1">
	<textarea id="logbox" name="logfile" cols="75" rows="15" class="bigTextBox"></textarea>
  </div>
  <div class="alt1">
	<input id="btnSend" name="analyze" type="submit" value="{TRANS:5}" onclick="doSend();" />
  </div>
</div>

Kann mir trotzdem jemand erklären warum die Javascript-Funktion so gefunden wird, aber wenn sie im onsubmit steht nicht? Ich verstehe das nicht.

Dieser Beitrag wurde von Matze bearbeitet: 12. Oktober 2008 - 11:08

Lorem ipsum dolor sit amet, consetetur sadipscing elitr.
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0