TinyMCE Textarea per JS auf Inhalt überprüfen

fRagiLeMOD

Mitglied
Moin,

ich hoffe, es gibt hier ein paar Leute, die schon mal etwas von dem TinyMCE Texteditor gehört haben. Dieser wandelt Textareas in einen Texteditor um.

Nun möchte ich aber die Textarea vor dem Abschicken überprüfen, ob sich darin Inhalt befindet und wenn NICHT, soll eine Fehlermeldung erscheinen.

Allerdings erscheint beim ersten mal Abschicken trotz Inhaltes in der Textarea die Fehlermeldung und erst wenn ich noch mal abschicke, geht es schließlich. So soll es eigentlich nicht sein - das muss behoben werden. Jedoch weiß ich nicht WIE.

Der Javascript Code zum überprüfen von Feldern befindet sich im <head> Bereich und der Javascript Code zum einbinden des TinyMCE Editors im <body> Bereich.

Hier die wichtigen Code Schnipsel:

HTML:
<script language="javascript" type="text/javascript">
  var form = "";
  var submitted = false;
  var error = false;
  function check_input(field_name) 
  {
    if (form.elements[field_name] && (form.elements[field_name].type != "hidden")) 
    {
      var field_value = form.elements[field_name].value;
      if (field_value == '') 
      {
        error = true;
      }
    }
  }
  function check_form(form_name) 
  {
    if(submitted == true) 
    {
      alert(unescape("Bitte warten Sie einen Moment, die Daten wurden bereits abgeschickt."));
      return false;
    }
    error = false;
    form = form_name;
    check_input("content");
    if (error == true)
    {
      alert(unescape("Einige Pflichtangaben wurden nicht angegeben, bitte beachten. (*)"));
      return false;
    } 
    else 
    {
      submitted = true;
      return true;
    }
  }
</script>
<!-- ... weiterer Inhalt ... -->
<form action="admin.php" onsubmit="return check_form(new);" method="post" id="new" enctype="multipart/form-data">
<!-- ... weiterer Inhalt ... -->
  <tr>
    <td width="240" valign="top">Inhalt:</td>
    <td><textarea name="content" cols="70" rows="16"></textarea></td>
  </tr>
<!-- ... weiterer Inhalt ... -->

Ich hoffe, jemand kann mir helfen. Ist sehr dringend! Danke! ;-)
 
Moin,

TinyMCE wandelt, reell betrachtet, keine Textareas in Texteditoren um.
Es blendet das Textarea aus, und stattdessen ein editierbares iFrame ein.
Das Textarea behält seinen ursprünglichen Inhalt(bei dir vermutlich garnichts), bis das Formular gesendet wird.
Beim Senden des Formulares wird der Inhalt des iFrames in das Textarea übertragen.

Du müsstest also den Inhalt des iFrames prüfen, und nicht den Inhalt des Textareas.

Wie du an diesen Inhalt kommst, steht hier: http://www.tutorials.de/forum/javas...inhalt-javascript-uebergeben.html#post1803484
 
Moin,

schon mal vielen Dank für Deine Infos. Ich muss sagen, ich bin keine Leuchte in sachen Javascript und habe es anhand des dort gezeigten Beispiels und weiterer Codeschnipsel aus dem Internet mal erweitert.

Jedoch funktioniert es nun gar nicht mehr, wenn ich das Formular abschicke - weder im Firefox, noch im IE. Habe wohl etwas falsch gemacht!? Bitte schaue mal in den Code. Hierbei handelt es sich um die Funktion check_tmce_textarea().

Die abzufragenden Felder existieren allesamt ("content", "title").

Ich bin mir ziemlich sicher, dass ich was falsch gemacht habe, aber ich habe keine Ahnung, was.

Quellen der Codeschnipsel
Der von Dir vorgeschlagene Beitrag, und:
http://tinymce.moxiecode.com/punbb/viewtopic.php?pid=43458 (Beitrag #27, Funktion "getHTML_TinyMCE(editor_id)")

Hier mein aktueller Code

HTML:
<!-- .... weiterer Code ... -->
<script language="javascript" type="text/javascript">
  var form = "";
  var submitted = false;
  var error = false;
  function check_input(field_name) 
  {
    if (form.elements[field_name] && (form.elements[field_name].type != "hidden")) 
    {
      var field_value = form.elements[field_name].value;
      if(field_value == '') 
      {
        error = true;
      }
    }
  }
  function check_tmce_textarea(area_name)
  { 
    obj = form.area_name;
    if(obj.contentDocument)
    {
      area_value = obj.contentDocument.body.innerHTML; // FFox
    }
    else
    {
      area_value = top.frames[area_name].form.body.innerHTML; // IE
    }
    if(area_value == '') 
    {
      error = true;
    }
  }
  function check_form(form_name) 
  {
    if(submitted == true) 
    {
      alert(unescape("Bitte warten Sie einen Moment, die Daten wurden bereits abgeschickt."));
      return false;
    }
    error = false;
    form = form_name;
    check_tmce_textarea("content");
    check_input("title");
    if (error == true)
    {
      alert(unescape("Einige Pflichtangaben wurden nicht angegeben, bitte beachten. (*)"));
      return false;
    } 
    else 
    {
      submitted = true;
      return true;
    }
  }
</script>
<!-- .... weiterer Code ... -->
<form action="admin.php" onsubmit="return check_form(newPage);" method="post" name="newPage" enctype="multipart/form-data">
<!-- .... weiterer Code ... -->
 
So, habe es selber herausgefunden. Es funktioniert jetzt, und zwar mit folgender angepasster Funktion:

Code:
function check_tmce_textarea(area_name)
{
  var area_content = tinyMCE.get(area_name).getContent();
  if(area_content == '' || area_content == '<p></p>') 
  {
    error = true;
  }
}

Oben einfach die alte Funktion check_tmce_textarea() mit dieser hier ersetzen.
 
Zurück