Просмотр полной версии : Форма с расширенными возможностями
Все видели форму, когда постят на форум.. вот мне нужна такая же, только всего с двумя кнопками: сделать выделенный текст жирным, вставить ссылку. Если есть что предложить, или уже есть готовый вариант, пишите цену..
BlackSun
01.09.2008, 14:21
<form method="POST" id="mforum">
<textarea name="msg" ..
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 - закрывающий.
Пробелы незабудь вырезать, которые ачат вставил.
<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+ob j2.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([тег], [/тег])"
попробуй так, хота логика скрипта странная
onClick="inc_tag('<b>', '</b>')", (вместо "<", ">" нужно поставить "[", "]" ) так как в текстареа будет результат,
<b>Выделенный текст</b>, а не сразу выделенный текст болдом
поставь любой визивик, например TinyMCE, и укажи в настройках, какие кнопки отображать, делов 5 минут
Когда-то выдерал из форума phpbb его бб-коды:
<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('','','','','','','','','','','','','','','' ,'','','');
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>
.:EnoT:.
01.09.2008, 16:06
Всё гораздо проще)) + ко всему кроссбраузерность.
Я в своих проектах его использую)
/* 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();
}
}
<form id="post" action="" method="post">
<button type="button" onclick="bbcode('','')"><b>B</b></button>
<button type="button" onclick="bbcode('','')"><i>I</i></button>
<textarea name="msg"></textarea>
</form>
Ооо, спасибо вам огромное!
to BlackSun спасибо за кодес!
to Naydav спс, забыл просто теги в ковычки поставить!
to Jer1cho спасиб огромное!
кстати вот скромное вознаграждение, по два в руки(только для участников предэдущих постов)..
13983333
16424444
17641111
18048888
19626666
25305555
С меня еще + :) ну прям выручили, я уж искать заколебался.. отпишитесь какие номерки забрать хотите..
ай яй, Енот, обожди сча еще два добавлю.. ))
BlackSun
01.09.2008, 16:19
Мну ненадо) отдай нужнаюшимся
Значит BlackSun не нужно, всеравно спасибо!
.:EnoT:.
01.09.2008, 16:23
Мне тож не надо, лучше в халяву сдай или себе оставь :)
.:EnoT:. тебе веднее, огромное спасибо за код!
Jer1cho и NayDav пишите отдам по три в руки..
спс, та я к своей привык, хоть ниче прикольного, а уже года 4 :)
http://www.xbb.uz/
качни его и юзай на здоровье.
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot