Last updated on February 9th, 2022 at 01:30 pm

This tutorial will show you how to insert text and smilies / emoji in to text field using javascript. This script also have options to add

  • URL
  • Bold
  • Italics
  • Code
  • Image
  • Underline

Once you have those in the textarea all you have to do is parse these shortcodes on your server to provide the result when user submit the form.

Here is the complete code

<script language="Javascript">
var isMozilla = (navigator.userAgent.toLowerCase().indexOf('gecko')!=-1) ? true : false;
var regexp = new RegExp("[\n]","gi");
function storeCaret(selec,type)
{
    if (isMozilla)
        { // Firefox
        oField = document.forms['news'].elements['newst'];
        objectValue = oField.value;
        objectValueStart = objectValue.substring( 0 , oField.selectionStart );
        objectValueEnd = objectValue.substring( oField.selectionEnd , oField.textLength );
        objectSelected = objectValue.substring( oField.selectionStart ,oField.selectionEnd );
        if (type) // smiley
            {
            oField.value = objectValueStart + " " + selec + objectSelected + objectValueEnd;
            }
        else
            {
            oField.value = objectValueStart + "[" + selec + "]" + objectSelected + "[/" + selec + "]" + objectValueEnd;
            }
        oField.focus();
        if (type) // smiley
            {
            oField.setSelectionRange(objectValueStart.length + selec.length + 2,objectValueStart.length + selec.length + 1);
            }
        else
            {
            oField.setSelectionRange(objectValueStart.length + selec.length + 2,objectValueStart.length + selec.length + 2);
            }
        }
    else
        { // IE
        oField = document.forms['news'].elements['newst'];
        var str = document.selection.createRange().text;
        if (str.length>0)
            {// if we have selected some text,,
            var sel = document.selection.createRange();
            if (type) // smiley
                {
                sel.text = " " + selec;
                }
            else
                {
                sel.text = "[" + selec + "]" + str + "[/" + selec + "]";
                }
            sel.collapse();
            sel.select();
            }
        else
            {
            oField.focus(oField.caretPos);
            oField.focus(oField.value.length);
            oField.caretPos = document.selection.createRange().duplicate();
            var bidon = "%~%"; // needed to catch the cursor position with IE
            var orig = oField.value;
            oField.caretPos.text = bidon;
            var i = oField.value.search(bidon);
            if (type) // smiley
                {
                oField.value = orig.substr(0,i) + " " + selec +  orig.substr(i, oField.value.length);
                }
            else
                {
                oField.value = orig.substr(0,i) + "[" + selec + "][/" + selec + "]" + orig.substr(i, oField.value.length);
                }
            var r = 0;
            for(n = 0; n < i; n++)
                {
                if(regexp.test(oField.value.substr(n,2)) == true)
                    {r++;}
                };
            if (type) // smiley
                {
                pos = i + 1 + selec.length - r;
                }
            else
                {
                pos = i + 2 + selec.length - r;
                }

            // re-format the textarea & move the cursor to the correct position
            var r = oField.createTextRange();
            r.moveStart('character', pos);
            r.collapse();
            r.select();
            }
        }
}

</script>

<form name="news">
<div class="textform">
<div class="buttons">
    <input type="button" value="b" style="width:50px;font-weight:bold" onclick="storeCaret('b')"/>
<input type="button" value="i" style="width:50px;font-style:italic" onclick="storeCaret('i')"/>
<input type="button" value="u" style="width:50px;text-decoration:underline" onclick="storeCaret('u')"/>
<input type="button" value="quote" style="width:50px" onclick="storeCaret('quote')"/>
<input type="button" value="code" style="width:50px" onclick="storeCaret('code')"/>
<input type="button" value="url" style="width:50px" onclick="storeCaret('url')"/>
<input type="button" value="img" style="width:50px" onclick="storeCaret('img')"/>
<input type="button" value="Smilie" class="smiley1" onclick="storeCaret(':)','smiley')"/></div>
<textarea name="newst" id="newst" class="text" rows="10" cols="45"></textarea>

</div>
</form><script language="Javascript">
document.getElementById('newst').value = ""; // needed for firefox
</script>

Demo

Leave a Reply

Your email address will not be published. Required fields are marked *