problem mit variablenübergabe
ayhan
- javascript
hallo allerseits,
habe ein kleines javascript-problem. vielleicht kann die eine oder der andere mir dabei helfen, es zu lösen.
ich habe auf einer seite mehrere formular-textfelder zur texteingabe. vergleichbar mit einem eingabefeld in einem gästebuch oder forum, wo man den text mittels tags wie [b]text[/b] formatieren kann. mit EINEM textfeld ist es gar kein problem, da ich ja mit
documents.FORMULARNAME.NAME DES TEXTFELDES.usw
das eingabefeld festlegen kann. aber ab zwei textfeldern habe ich ja das problem, daß ich der funktion noch zusätzlich sagen muß, in welchem textfeld sie die aktion ausführen soll. man kann natürlich für jedes textfeld eine eigene funktion definieren (was ich in meiner not auch erstmal gemacht habe und was auch funktioniert), aber das sehe ich sogar als JS-laie, daß dies schwachsinnig ist.
nun habe ich die funktion und den aufruf leicht abgewandelt, aber bekomme die fehlermeldung "formname" (die variable) ist undefiniert...
hier die funktion:
########
<SCRIPT language="JavaScript" type="text/javascript">
<!--
function DoPrompt(action,formname) {
var revisedMessage;
var currentMessage = document.insertform.elements[formname].value;
if (action == "b") {
var txt = document.selection.createRange().text;
insertAtCaret(this.insertform.elements[formname],´[b]´ + txt + ´[/b]´);
document.insertform.elements[formname].focus();
return;
}
if (action == "i") {
var txt = document.selection.createRange().text;
insertAtCaret(this.insertform.elements[formname],´[i]´ + txt + ´[/i]´);
document.insertform.elements[formname].focus();
return;
}
if (action == "u") {
var txt = document.selection.createRange().text;
insertAtCaret(this.insertform.elements[formname],´[u]´ + txt + ´[/u]´);
document.insertform.elements[formname].focus();
return;
}
if (action == "http") {
var txt = document.selection.createRange().text;
insertAtCaret(this.insertform.elements[formname],´[url=http://www.link.de
]´ + txt + ´[/url]´);
document.insertform.elements[formname].focus();
return;
}
if (action == "mail") {
var txt = document.selection.createRange().text;
insertAtCaret(this.insertform.elements[formname],´[mail]´ + txt + ´[/mail]´);
document.insertform.elements[formname].focus();
return;
}
if (action == "quote") {
var txt = document.selection.createRange().text;
insertAtCaret(this.insertform.elements[formname],´[quote]´ + txt + ´[/quote]´);
document.insertform.elements[formname].focus();
return;
}
}
function storeCaret (textEl) {
if (textEl.createTextRange) textEl.caretPos = document.selection.createRange().duplicate();
}
function insertAtCaret (textEl, text) {
var currentMessage = document.insertform.elements[formname].value;
if (textEl.createTextRange && textEl.caretPos) {
var caretPos = textEl.caretPos;
caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ´ ´ ? text + ´ ´ : text;
} else
textEl.value = currentMessage + text;
}
//-->
</SCRIPT>
########
hier der aufruf (11 steht für 11.formularelement):
<td>
<a href="#" onclick="javascript:DoPrompt(´b´,´11´);"><img src="images/misc/bold.gif" border=0></a>
<a href="#" onclick="javascript:DoPrompt(´i´,´11´);"><img src="images/misc/italic.gif" border=0></a>
<a href="#" onclick="javascript:DoPrompt(´u´,´11´);"><img src="images/misc/underline.gif" border=0></a>
<a href="#" onclick="javascript:DoPrompt(´http´,´11´);"><img src="images/misc/http.gif" border=0></a>
<a href="#" onclick="javascript:DoPrompt(´mail´,´11´);"><img src="images/misc/email.gif" border=0></a>
</td>
nun habe ich die funktion und den aufruf leicht abgewandelt, aber bekomme die fehlermeldung "formname" (die variable) ist undefiniert...
hier die funktion:
########
<SCRIPT language="JavaScript" type="text/javascript">
<!--function DoPrompt(action,formname) {
mach mal hier ein alert(formname) rein.
var revisedMessage;
var currentMessage = document.insertform.elements[formname].value;
und es ist nebenbei bemerkt immer sinnvoll auf das vorhandensein, bzw. Gültigkeit von Werten zu prüfen.
if(!document.insertform) return alert('Fehler!\n"insertform" existiert nicht.');
if(!document.insertform[formname]) return alert('Fehler!\n"'+ formname + '" existiert nicht in insertform.');
var currentMessage = document.insertform.elements[formname].value;
OK, man kann es auch übertreiben. Aber du merkst ja grad selber, dass du nicht weiterkommst.
hier der aufruf (11 steht für 11.formularelement):
Das heisst 11 (Elf) oder?
Damit hast du dir eine Falle gestellt.
document.insertfomr.elements[11] meint das elfte Fomrularelement. Wenn du jetzt eins hast was den Namen '11' hat weiss ich nicht was passiert. Ich vermute aber mal, das die Zahl 11 als index verwendet wird und nicht als String.
folglich, wäre es sinnvoll andere Namen zu verwenden.
Struppi.
hi struppi,
erstmal danke für die antwort.
mach mal hier ein alert(formname) rein.
hab ich... und es wird mir wie gewünscht die '11' (elf, als Zahl, wie du richtig vermutest hast) ausgegeben. dennoch bleibt die fehlermeldung
"formname" (die variable) ist undefiniert...
folglich, wäre es sinnvoll andere Namen zu verwenden.
ich weiß, das wäre am besten, vor allem wenn man nachträglich ein formularfeld hinzufügt und die nummerierung immer anpassen muß, aber das hat dann erst recht nicht funktioniert
function DoPrompt(action,formname) {
var revisedMessage;
var currentMessage = document.insertform.formname.value;
if (action == "b") {
var txt = document.selection.createRange().text;
insertAtCaret(this.insertform.formname,'[b]' + txt + '[/b]');
document.insertform.formname.focus();
return;
}
...usw
da bekam ich diesselbe fehlermeldung. ich denk "in php" daher denke ich, setze ich die variablen auch dementsprechend (falsch) ein.
hi struppi,
erstmal danke für die antwort.
mach mal hier ein alert(formname) rein.
hab ich... und es wird mir wie gewünscht die '11' (elf, als Zahl, wie du richtig vermutest hast) ausgegeben. dennoch bleibt die fehlermeldung
"formname" (die variable) ist undefiniert...
Nein ist sie nicht, auch wenn du das aus der Fehlermeldung schliesst.
socument.formName.element[11] ist undefiniert.
folglich, wäre es sinnvoll andere Namen zu verwenden.
ich weiß, das wäre am besten, vor allem wenn man nachträglich ein formularfeld hinzufügt und die nummerierung immer anpassen muß, aber das hat dann erst recht nicht funktioniert
Dann machst du etwas falsch, bei mir funktioniert folgendes:
<form name="test">
<input type="text" name="test">
</form>
<a href="#" onclick="document['test']['test'].value = 'test';return false;">klick</A>
Struppi.