BBCode in verschiedenen Formularen

  • Themenstarter Themenstarter ByeBye 8492
  • Beginndatum Beginndatum
B

ByeBye 8492

Moinsen,

ich habe mir jetzt nen kleines BB-Code System für mein CMS geschrieben, allerdings gibt es in dem CMS viele verschieden Formulare, die Textareas haben auch unterschiedliche Name.

D.h. ich kann den BB-Code nicht überall einfügen, da es halt unterschiedliche Formulare gibt ... :(, gibt es eine Möglichkeit die Funktion setbb() so hinzubiegen, das er den Namen des Formulares ( ist dies überhaupt von nöten? gibt immer nur ein Formular) und dann das der Text area?

Ich hatte gedacht, dies vielleicht per "onclick" oder "onfocus" zu lösen, wenn ich es dann ausprobieren will, klappt es immer nicht, unten ist mal die Funtkion setbb :).

var setText = 'text'; <!-- Set Text wird durch die Textarea gesetzt -->
function setbb(bbtag)
{
text = prompt(''+form+' Geben Sie hier den Text ein ['+bbtag+']xxx['+bbtag+']', '');
if ((text != null) && (text != '')) {
document.form.setText.value += '['+ bbtag +']' + text + '[/'+ bbtag+']';
document.form.setTextfocus();
}
}
 
Was Nun?:rolleyes:

? BBCode in verschiedenen Formularen oder gibt immer nur ein Formular


Falls du immer nur ein Formular haben solltest, dieses aber immer unterschiedlich Namen haben kann, kannst du es in jedem Fall per

Code:
document.forms[0]
ansprechen.

Wenn dieses Formular dann günstigerweise auch nur ein <textarea> enthält, kannst du dieses herauspicken, indem du alle Formularelemente durchläufst....und deren Eigenschaft tagName überprüfst.
 
Moin,

Also, theoretisch sind die Formulare gleich aufgebaut.

Allerdings kann es ja mal sein, das man mal 2 Textboxes brauch ;).

Theoretisch, könnte man also den Formularnamen auslesen lassen.
Ich könnte dann ja der Hauptextarea den Namen "message" in jedem Fall lassen, damit wäre eine Variable im BB-Code weniger zu klären, besser wäre es natürlich wenn das Script es automatisch erfassen würde ;).

könnte man eigentlich
<textarea onfocus="setActiveText= this.name" name="test">

und könnte man nicht einfach in den <form>Tag
<form name="test" method="post" action="bla" onload="SetForm = this.name">
machen?
Code:
var SetForm = 'neu';
var setText = 'text'; <!-- Set Text wird durch die Textarea gesetzt -->
function setbb(bbtag)
{
text = prompt(''+form+' Geben Sie hier den Text ein ['+bbtag+']xxx['+bbtag+']', '');
if ((text != null) && (text != '')) {
document.SetForm.setText.value += '['+ bbtag +']' + text + '[/'+ bbtag+']';
document.SetForm.setText.focus();
}
}

schreiben und dann oben in der BB-Code Function eine Variable
setActiveText haben, die dann automatisch den Wert annimmt.


Wäre das so wie es da ist, theoretisch lauffähig, weil ich habe das Gestern schon so ähnlich versucht, und er konnte es nicht ansteuern :heul:

Was bringt eigentlich das document.forms[0] ist das nen Array, welches das erste Formular ansteuert?

P.s. Bin absoluter JavaScript n00.b, deswegen können meine Fragen etwas komisch sein *G*.
 
Das sind ja nen Haufen Fragen:-)....welche ich nur teilweise verstehe:-(

Erstmal zu document.forms[0]....jo, document.forms ist ein Array, welcher alle Formulare im Dokument als Objekte beinhaltet.

Objekte...das ist das Stichwort...vergiss mal den Namen des Formulars....der ist nebensächlich....wenn du in der Seite nur 1 Formular hast, sprich es per document.forms[0] an....einfacher gehts kaum.

Andere Variante...der Button, welcher das mit dem BBCode auslöst...der befindet sich ja wahrscheinlich in dem betreffenden Formular.

Du kannst beim Funktionsaufruf im Button ganz einfach das Formular der Funktion als Objekt übergeben:

Code:
<input type="button" onclick="funktion(this.form)">
....this. form ist bei einem Formularelement immer das Formular-Objekt, in welchem sich das Element befindet.

Den Rest habsch net verstanden:eek:
 
Original geschrieben von fatalus
Andere Variante...der Button, welcher das mit dem BBCode auslöst...der befindet sich ja wahrscheinlich in dem betreffenden Formular.

Du kannst beim Funktionsaufruf im Button ganz einfach das Formular der Funktion als Objekt übergeben:

Code:
<input type="button" onclick="funktion(this.form)">
....this. form ist bei einem Formularelement immer das Formular-Objekt, in welchem sich das Element befindet.

Den Rest habsch net verstanden:eek:

Gut, das letzte habe ich auch nicht verstanden *G*.

Also, die gesamte Seite wird ja über Templates gesteuert :).
Dass heisst, wenn ich die BB-Codes ändern will, will ich das nur einmal machen, und nicht tausendmal. Also lasse ich die Buttons für den BB-Code in einer eigenen Datei und inkludiere diese dann bei Laufzeit :), dann sind die Buttons aber im Zielformular drinne :).

Allerdings verstehe ich dieses "this.form" nicht so ganz *G*.

Also bisher werden die BB-Codes so eingefügt:
setbb('b');

und dadurch wird die oben beschriebene Funktion aufgerufen :).

Wo müsste ich da jetzt was ändern, das er automatisch das richtige Formular raussucht?

EDIT: Wenn ich die Funktion so umschreibe( natürlich auch die Hauptfunktion ) :setbb(this.form, 'b'), und dann den BB-Code eingebe passiert in FireFox gar nichts mehr, und der IE gibt einen Fehler aus, das es kein Objekt ist, oder null ist :heul:.
 
Zuletzt bearbeitet von einem Moderator:
So:setbb('b',this.form);

in der Funktion hast du dann das Formular als Variable verfügbar...z.B.
Code:
function setbb(strTag,objForm)
{
alert(objForm.name);
}
...gäbe dir nur zum Test den Namen des Formulars aus(falls vorhanden)
 
Habe meine setbb Funktion mal modifiziert:
function setbb(Form,bbtag)
{
formname = Form.name;
text = prompt('Geben Sie hier den Text ein ['+bbtag+']xxx['+bbtag+']', '');
if ((text != null) && (text != '')) {
document.formname.message.value += '['+ bbtag +']' + text + '[/'+ bbtag+']';
document.formname.message.focus();
}
}

also, ich kann forumname ausgeben lassen und er zeigt mir den korrekten Wert an ( Name ist "form" sehr einfallsreich *G* ).

Allerdings fügt er nichts in die Textbox ( message ) ein, der IE weigert sich mit dem Fehler:
'document.forumname.message' ist Null oder kein Objekt

Ersetzt er das forumname nicht automatisch mit dem Wert den es beinhalten soll? Habe es auch schon mit forumname.value versucht, kam aber auch nur der Fehler :heul:
 
Ne..das wird nicht automatisch ersetzt....dazu müsstest du mit eval() arbeiten oder so:
Code:
document.forms[formname].message.value
...aber das war es, was ich andeuten wollte...du brauchst den Namen des Formulars überhaupt nicht.

Code:
function setbb(Form,bbtag)
{text = prompt('Geben Sie hier den Text ein ['+bbtag+']xxx['+bbtag+']', '');
if ((text != null) && (text != '')) {
Form.message.value += '['+ bbtag +']' + text + '[/'+ bbtag+']';
Form.message.focus();
}
}
....sollte ausreichen:)...."Form" beinhaltet das Formular als Objekt....das ist alles was du brauchst.
 
thx :D

Aber warum klappt der BB-Code nicht mit FireFox?
Irgendwie will die Funktion da nicht laufen :(
 
Habe mir das jetzt mal in der JAvaScript Konsole von FireFox angeguckt, und der meint das 'form' nicht definiert ist, im IE klappt es aber ohne Probleme ..


EDIT: Jetzt klappt es :D. Naja die Smilies werde ich wohl erstma nicht machen, werde dir erstma nen bisschen ruhe gönnen *G*.
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück