Все видели форму, когда постят на форум.. вот мне нужна такая же, только всего с двумя кнопками: сделать выделенный текст жирным, вставить ссылку. Если есть что предложить, или уже есть готовый вариант, пишите цену..
<form method="POST" id="mforum"> <textarea name="msg" .. Code: script> function inc_tag(st_t, en_t) { obj = document.forms.mforum.msg; obj2 = document.forms.mforum; if ((document.selection)) { obj.focus(); obj2.document.selection.createRange().text = st_t+obj2.document.selection.createRange().text+en_t; } else { obj.focus(); obj.value += st_t+en_t; } } </script> inc_tag(st_t, en_t) - st_t - начальный тег ([*B] например), en_t - закрывающий. Пробелы незабудь вырезать, которые ачат вставил.
Code: <html> </head> <script> function inc_tag(st_t, en_t) { obj=document.forms.mforum.msg; obj2=document.forms.mforum; if ((document.selection)) { obj.focus(); obj2.document.selection.createRange().text=st_t+obj2.document.selection.createRange().text+en_t; } else { obj.focus(); obj.value+=st_t+en_t; } } </script> </head> <body> <form method="POST" id="mforum"> <textarea name="msg" WRAP="virtual" COLS="40" ROWS="3"> </TEXTAREA><br> <INPUT TYPE="button" VALUE="B" onClick="inc_tag([тег], [/тег])"> </form> </body> </html> Вот тут накидал, тестовый вариант.. я с яваскриптом на вы.. только он как то работать не особо желает.. Пробелы убрал..
попробуй так, хота логика скрипта странная onClick="inc_tag('<b>', '</b>')", (вместо "<", ">" нужно поставить "[", "]" ) так как в текстареа будет результат, <b>Выделенный текст</b>, а не сразу выделенный текст болдом поставь любой визивик, например TinyMCE, и укажи в настройках, какие кнопки отображать, делов 5 минут
Когда-то выдерал из форума phpbb его бб-коды: PHP: <html> <head> <title>test</title> <script type="text/javascript"> var imageTag = false; var theSelection = false; var clientPC = navigator.userAgent.toLowerCase(); var clientVer = parseInt(navigator.appVersion); var is_ie = ((clientPC.indexOf("msie") != -1) && (clientPC.indexOf("opera") == -1)); var is_nav = ((clientPC.indexOf('mozilla')!=-1) && (clientPC.indexOf('spoofer')==-1) && (clientPC.indexOf('compatible') == -1) && (clientPC.indexOf('opera')==-1) && (clientPC.indexOf('webtv')==-1) && (clientPC.indexOf('hotjava')==-1)); var is_moz = 0; var is_win = ((clientPC.indexOf("win")!=-1) || (clientPC.indexOf("16bit") != -1)); var is_mac = (clientPC.indexOf("mac")!=-1); bbcode = new Array(); bbtags = new Array('[b]','[/b]','[i]','[/i]','[u]','[/u]','[s]','[/s]','[quote]','[/quote]','[code]','[/code]','[list]','[/list]','[list=]','[/list]','[url]','[/url]'); imageTag = false; function getarraysize(thearray) { for (i = 0; i < thearray.length; i++) { if ((thearray[i] == "undefined") || (thearray[i] == "") || (thearray[i] == null)) return i;} return thearray.length;} function arraypush(thearray,value) { thearray[ getarraysize(thearray) ] = value;} function arraypop(thearray) { thearraysize = getarraysize(thearray); retval = thearray[thearraysize - 1]; delete thearray[thearraysize - 1]; return retval;} function bbstyle(bbnumber) { var txtarea = document.post.message; txtarea.focus(); donotinsert = false; theSelection = false; bblast = 0; if (bbnumber == -1) { while (bbcode[0]) { butnumber = arraypop(bbcode) - 1; txtarea.value += bbtags[butnumber + 1]; buttext = eval('document.post.addbbcode' + butnumber + '.value'); eval('document.post.addbbcode' + butnumber + '.value ="' + buttext.substr(0,(buttext.length - 1)) + '"');} imageTag = false; txtarea.focus(); return;} if ((clientVer >= 4) && is_ie && is_win){ theSelection = document.selection.createRange().text; if (theSelection) { document.selection.createRange().text = bbtags[bbnumber] + theSelection + bbtags[bbnumber+1]; txtarea.focus(); theSelection = ''; return;}} else if (txtarea.selectionEnd && (txtarea.selectionEnd - txtarea.selectionStart > 0)){ mozWrap(txtarea, bbtags[bbnumber], bbtags[bbnumber+1]); return;} for (i = 0; i < bbcode.length; i++) { if (bbcode[i] == bbnumber+1) { bblast = i; donotinsert = true;}} if (donotinsert) { while (bbcode[bblast]) { butnumber = arraypop(bbcode) - 1; txtarea.value += bbtags[butnumber + 1]; buttext = eval('document.post.addbbcode' + butnumber + '.value'); eval('document.post.addbbcode' + butnumber + '.value ="' + buttext.substr(0,(buttext.length - 1)) + '"'); imageTag = false;} txtarea.focus(); return; } else { if (imageTag && (bbnumber != 14)) { txtarea.value += bbtags[15]; lastValue = arraypop(bbcode) - 1; document.post.addbbcode14.value = "Img"; imageTag = false;} txtarea.value += bbtags[bbnumber]; if ((bbnumber == 14) && (imageTag == false)) imageTag = 1; arraypush(bbcode,bbnumber+1); eval('document.post.addbbcode'+bbnumber+'.value += "*"'); txtarea.focus(); return;} storeCaret(txtarea);} function mozWrap(txtarea, open, close){ var selLength = txtarea.textLength; var selStart = txtarea.selectionStart; var selEnd = txtarea.selectionEnd; if (selEnd == 1 || selEnd == 2) selEnd = selLength; var s1 = (txtarea.value).substring(0,selStart); var s2 = (txtarea.value).substring(selStart, selEnd) var s3 = (txtarea.value).substring(selEnd, selLength); txtarea.value = s1 + open + s2 + close + s3; return; } </script> </head> <body> <form action="" name="post" method="post"> <input type="button" value="B" onclick="bbstyle(0)"/> <input type="button" value="i" onclick="bbstyle(2)"/> <input type="button" value="u" onclick="bbstyle(4)"/> <input type="button" value="s" onclick="bbstyle(6)"/> <input type="button" value="Quote" onclick="bbstyle(8)"/> <input type="button" value="Code" onclick="bbstyle(10)"/> <input type="button" value="List" onclick="bbstyle(12)"/> <input type="button" value="List=" onclick="bbstyle(14)"/> <input type="button" value="URL" onclick="bbstyle(16)"/><br/> <textarea name="message" rows="10" cols="50"></textarea> </form> </body> </html>
Всё гораздо проще)) + ко всему кроссбраузерность. Я в своих проектах его использую) Code: /* BB-codes */ function bbcode(open, close){ msgfield = (document.all) ? document.all.msg : document.forms['post']['msg']; /* IE */ if (document.selection && document.selection.createRange){ msgfield.focus(); sel = document.selection.createRange(); sel.text = open + sel.text + close; msgfield.focus(); } /* Mozilla */ else if (msgfield.selectionStart || msgfield.selectionStart == '0'){ var startPos = msgfield.selectionStart; var endPos = msgfield.selectionEnd; msgfield.value = msgfield.value.substring(0, startPos) + open + msgfield.value.substring(startPos, endPos) + close + msgfield.value.substring(endPos, msgfield.value.length); msgfield.selectionStart = msgfield.selectionEnd = endPos + open.length + close.length; msgfield.focus(); } /* Main browsers */ else{ msgfield.value += open + close; msgfield.focus(); } } PHP: <form id="post" action="" method="post"> <button type="button" onclick="bbcode('[b]','[/b]')"><b>B</b></button> <button type="button" onclick="bbcode('[i]','[/i]')"><i>I</i></button> <textarea name="msg"></textarea> </form>
Ооо, спасибо вам огромное! to BlackSun спасибо за кодес! to Naydav спс, забыл просто теги в ковычки поставить! to Jer1cho спасиб огромное! кстати вот скромное вознаграждение, по два в руки(только для участников предэдущих постов).. 13983333 16424444 17641111 18048888 19626666 25305555 С меня еще + ну прям выручили, я уж искать заколебался.. отпишитесь какие номерки забрать хотите.. ай яй, Енот, обожди сча еще два добавлю.. ))