Autor | Zpráva | ||
---|---|---|---|
Neas Profil |
#1 · Zasláno: 26. 5. 2010, 14:33:52 · Upravil/a: Neas
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 |
#2 · Zasláno: 26. 5. 2010, 19:58:08 · Upravil/a: Witiko
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 |
#3 · Zasláno: 27. 5. 2010, 19:42:50
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 |
#4 · Zasláno: 29. 5. 2010, 11:49:15
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 |
||
Časová prodleva: 7 dní
|
|||
kozusnik.jan Profil * |
#5 · Zasláno: 5. 6. 2010, 12:26:35
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 |
#6 · Zasláno: 7. 6. 2010, 15:43:36 · Upravil/a: Neas
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 :-) |
||
Časová prodleva: 14 let
|
0