Autor Zpráva
freewill
Profil
Mam takovy jednoduchy script ajax pro autmaticke nacitani z databaze tzn vyberu z selextboxu polozku a podle id vypisuju data z databaze...pod selectboxem mam jeste textarea defaultne mam nastaveny TinyMCE na kazdou textareu coz mi samozrejme bezproblemove funguje problem nastane az tehdy kdyz vyberu polozku z selextboxu a nactou se mi data...pak se tinymce nezobrazi a zobrazi se ciste textarea nevite cim to muze byt?

prikladam ten script:

          function dopln() {
            var url = "aktuality.php?c=nova-aktualita&ch=zapas&id="+document.getElementById( 'zapas')[document.getElementById('zapas').selectedIndex].value;

            if(window.XMLHttpRequest) 
            {
              httpRequest = new XMLHttpRequest();
            } else if(window.ActiveXObject) 
              {
                httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
              }
              httpRequest.open("GET", url, true);
              httpRequest.onreadystatechange = neco;
              httpRequest.send(null); 
            }
          
          function neco() {
            if(httpRequest.readyState == 4) 
            {
              if(httpRequest.status == 200) 
              {
                document.body.innerHTML = httpRequest.responseText;
              } else {
                alert("Problém s načítání dat:" + httpRequest.statusText);
              }
            }
          }
Sabracon
Profil
Ahoj,

mám úplně stejný problém jako předchozí příspěvěk. Prohledal jsem net a nenašel uspokojivou odpověď. Mám editaci klienta, kterého načtu přes select pomocí ajaxu. Dynamicky se mi zobrazí <inputy s údaji> a já mohu editovat a nasledně uložit, to funguje. Nainstaloval jsem Tinymce, který mi jinde na webu funguje a ukládá data jak má. Problém nastane, když si ho načtu pomocí Ajaxu tak <textarea> se mi nezmění a tinymce se nezobrazí . Věděl by jste kde dělám chybu nebo mě trochu nakopl jak postupovat? Děkuji mnohokrát :)

<script>
function showUser(str) {
  if (str=="") {
    document.getElementById("txtHint").innerHTML="";
    return;
  } 
  if (window.XMLHttpRequest) {
    // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
  } else { // code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.onreadystatechange=function() {
    if (xmlhttp.readyState==4 && xmlhttp.status==200) {
       
       tinyMCE.execCommand('mceAddControl', false, xmlhttp.responseText);
       document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
    }
  }
  xmlhttp.open("GET","/php/edit_kli/getuser.php?q="+str,true);
  xmlhttp.send();
 }
</script>

a nastavení Tinymce
<script type="text/javascript" src="http://www.xxx.cz/php/tinymce/js/tinymce/tinymce.min.js"></script>
<script>
tinymce.init({
    
    
    selector: "textarea#elm1",
    language: "cs",
    theme: "modern",
    width: 480,
    height: 240,
    plugins: [
         "advlist autolink link image lists charmap print preview hr anchor pagebreak spellchecker",
         "searchreplace wordcount visualblocks visualchars code fullscreen insertdatetime media nonbreaking",
         "save table contextmenu directionality emoticons template paste textcolor"
   ],
   content_css: "css/content.css",
   toolbar: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | l      ink image | print preview media fullpage | forecolor backcolor emoticons", 
   style_formats: [
        {title: 'Bold text', inline: 'b'},
        {title: 'Red text', inline: 'span', styles: {color: '#ff0000'}},
        {title: 'Red header', block: 'h1', styles: {color: '#ff0000'}},
        {title: 'Example 1', inline: 'span', classes: 'example1'},
        {title: 'Example 2', inline: 'span', classes: 'example2'},
        {title: 'Table styles'},
        {title: 'Table row 1', selector: 'tr', classes: 'tablerow1'}
    ]
 }); 
</script>


tady je úryvek kodu, který volám pomocí ajaxu,
 echo "<td colspan=2><textarea id='elm1' name='popis' value='" . $row['popis'] . "'>" . $row['popis'] . "</textarea></td>";
_es
Profil
Sabracon:
Príkaz v druhom kóde tinymce.init({... je vykonaný len pri načítaní stránky a „aktivuje“ len textarey, ktoré vtedy na stránke existujú. Ak chceš „aktivovať“ textarey dynamicky pridané neskôr, musíš ich tiež „aktivovať“ podľa dokumentácie k TinyMCE.
Sabracon
Profil
Takže jestli jsem to pochopil správně. Musím ještě dopsat "něco" do kódu, v <head></head>, aby se Tinymce dynamicky načetl ?
_es
Profil
Sabracon [#4]:
Nie, TynyMCE stačí „načítať“ raz - súbor tinymce.min.js. Musíš to „niečo“ (asi metódu tinymce.init) dať do kódu tak, aby sa to „aktivovalo“ pre dynamicky pridané elementy až po ich vytvorení, teda v prvom kóde niekde medzi 15. a 17. riadok.
Sabracon
Profil
Tak teď jsem docílil toho po přidání do kodu:
<script>
function showUser(str) {
  if (str=="") {
    document.getElementById("txtHint").innerHTML="";
    return;
  } 
  if (window.XMLHttpRequest) {
    // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
  } else { // code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.onreadystatechange=function() {
    if (xmlhttp.readyState==4 && xmlhttp.status==200) {
       
       
       document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
       
       var tinymce_url = 'http://tinymce.cachefly.net/4.0/';

jQuery.getScript(tinymce_url+"jquery.tinymce.min.js").done(function(){
    $('textarea').tinymce({
        script_url: tinymce_url+'tinymce.min.js',
        
        language: "cs",
        theme: "modern",
    
        plugins: [
            "advlist autolink lists link image charmap print preview anchor",
            "searchreplace visualblocks code fullscreen",
            "insertdatetime media table contextmenu paste"
        ],
        toolbar: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image"
    });
});
    }
  }
  xmlhttp.open("GET","/php/edit_kli/getuser.php?q="+str,true);
  xmlhttp.send();
 }
</script>


tak při prvním vybrání v Selectu se mi již objeví Tinymce a dokonce to i ukládá upravený text. Ale když bez refreshe stránky hned vyberu jiného klienta v selectu, tak tinymce se již nenačte a textarea zmizí. Tím stylem, že na chviličku ji vidím a po sekundě zmizne, jako by se snažil načíst tinymce ale marně. Přidal jsem kod od 19 do 35 řádku.
_es
Profil
Sabracon [#6]:
Na čo si tam dal jQuery.getScript? Taká rada v [#5] nebola, dokonca si si z toho mohol odvodiť, že tam nič také dávať nemáš. TynyMCE máš predsa načítané hneď v prvom riadku v druhom kóde v [#2].
Sabracon
Profil
Právě javascript ještě dobře neovládám. Ten kód jsem našel na netu. Sice fungoval, ale napůl. Mohl by mi někdo napsat konkretní kód jak znovu zavolat tinymce přes ajax viz [#5]. Děkuji.
Chamurappi
Profil
Reaguji na Sabracona:
Co je nejasného na radě v [#5], tedy dát tinymce.init dovnitř funkce volané po načtení <textarea>, s níž má tinymce.init pracovat?
Sabracon
Profil
A co tedy dělá příkaz " tinyMCE.execCommand('mceAddControl', true, edId); " ten všude píšou se spojením dynamického načítání Tinymce. ale nefunguje mi. Nebo spíše nevím jak bych měl zapsat vyvolání tinymce.init jak píšete.
Chamurappi
Profil
Reaguji na Sabracona:
Aha, to je asi také možnost.

co tedy dělá příkaz
Proč se ptáš nás a ne vyhledávače? Našel bys oficiální dokumentaci. Třetí argument má být id elementu, který se na nahradit za WYSIWYG. Podívej se, co dáváš jako třetí argument ve svém kódu…
Sabracon
Profil
ID mám normálně elm1 viz kod . ale nic se nestane když to tam dam. Jediné co trochu fungovalo byl ten script pres jquery.
Chamurappi
Profil
Reaguji na Sabracona:
ID mám normálně elm1 viz kod .
Ne, jako id tam dáváš xmlhttp.responseText, viz tvůj řádek 16.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: