Autor Zpráva
Neas
Profil
Ahoj.
Mám textareu pro přidání příspěvku do fóra a potřeboval bych nějakou funkci, abych do ní mohl vkládat smailíky. Samotnou funkci v php, která projede text a nahradí :-) za obrázek daného smailíka už mám, ale potřeboval bych ještě funkci v JS, abych při kliku na obrázek smailíka, dostal textovou podobu toho smailíka do textarei.
Mám tuto funkci a funguje dobře:
function smile(smailik)
      {
      document.form1.prispevek.value += smailik;
      }

ale má to jednu velikou nevýhodu: pokud napíšu text a kurzor umístím někam doprosřed napsaného textu a stisknu obrázek smailíka nad textareou:
<img onClick="smile(' :-) ')" src="smail/smail.gif" />

smailík se umístí až na konec zprávy a nikoli hned za kurzor. Nevíte prosím někdo, jak funkci upravit, aby se smailík zobrazoval vždy právě za kurzorem?
Děkuji :-)
Witiko
Profil
Funkce na získání pozice kurzoru (není moje práce). Stačí text textarey rozseknout pomocí String.substr a vklínit mezi části smajlík.

function getCaretPosition(objekt) {
  if (document.getSelection) {
    return objekt["selectionStart"];
  }
  else if (document.selection&&document.selection.createRange) {
    var selectionlibrary_range = document.selection.createRange();
    var selectionlibrary_len = selectionlibrary_range.text.length;
    selectionlibrary_range.moveStart('textedit', -1);
    return selectionlibrary_range.text.length - selectionlibrary_len;
  }
  else {
    return false;
  }
}


Vložení textu do textarey způsobí posun kurzoru na její konec, tato funkce by mohla přijít vhod:

function setCaretPosition(ctrl, pos){
  if(ctrl.setSelectionRange)
    {
    ctrl.focus();
    ctrl.setSelectionRange(pos,pos);
    }
  else if (ctrl.createTextRange) {
    var range = ctrl.createTextRange();
    range.collapse(true);
    range.moveEnd('character', pos);
    range.moveStart('character', pos);
    range.select();
  }
}


Nějak takhle (schématické):

  var object = document.getElementById("textarea");
  var position = getCaretPosition(object);
  object.value = object.value.substr(0, position) + " :D " + object.value.substr(position);
  setCaretPosition(object, position);
Neas
Profil
Promiň, ale mohl by jsi mi to prosímtě vysvětlit trošku víc lajcky? JS neni zrovna moje nejsilnější stránka.
Neas
Profil
Dobrý, tak už mi to funguje, děkuju, ale má to jednu malou nevýhodu: když někam vložím smailíka, kurzor se přemístí před něj místo za něj. Nešly by ty funkce nějak upravit, aby se po vložení smailíka kurzor posunul až za něj? A jestli ano, jak?
Děkuju
kozusnik.jan
Profil *
Ahoj, mohli byste mi prosím vysvětlit to získání pozice kurzoru,... já moc javascript neumím a nefunguje mi to. Moc dík
Neas
Profil
okopíruj si ty 2 funkce, které posílal Witiko a pak si vytvoř novou funkci:
function smailik(smail)
{
   var object = document.getElementById("textarea");
   var position = getCaretPosition(object);
   object.value = object.value.substr(0, position) + smail + object.value.substr(position);
   setCaretPosition(object, position);
}

a do html pak:
<img onclick="smailik(' :-) ');" src="smail/1.gif" />

nezapomeň si pak změnit ID v tom tučně vyznačeném na ID, které má textarea na tvé stránce :-)

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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

0