Консультация № 144476
20.09.2008, 15:40
0.00 руб.
20.09.2008, 15:45
0 1 1
Добрый день.
Я совершенно не разбираюсь в javascript, поэтому возникла такая проблема.
Есть два поля "textarea" для ввода короткого описания новости и полного варианта текста.
Я выдрал кусок кода javascript для вставки bbcode в этих полях,но у меня получается вставлять bbcode только в одно из полей.
Как можно дописать скрипт, чтобы можно было вставлять в два поля bbcode ?Заранее благодарю.
это форма
Код:
<form action="bbcode.php"  name="form" method="post">      
<p><a href=# onClick="javascript:tag('<b>', '</b>');return false;"><img src='bbcode_img/b.gif' title='жирный текст'></a><a href=# onClick="javascript:tag('<i>', '</i>'); return false;"><img src='bbcode_img/i.gif' title='курсив'></a><a href=# onClick="javascript:tag('<u>', '</u>'); return false;"><img src='bbcode_img/u.gif' title='подчёркнутый текст'></a><a href=# onClick="javascript:tag('<s>', '</s>'); return false;"><img src='bbcode_img/s.gif' title='подчёркнутый текст'></a><a href=# onClick="javascriipt:tag('<quote>', '</quote>');return false;"><img src='bbcode_img/quote.gif' title='цитата'></a>

<textarea cols="40" rows="10" name="text"></textarea></p>

<textarea cols="40" rows="10" name="fulltext"></textarea></p>

<input type="submit" name="sub" value="отправить">

</form>

это javascript
Код:
 <script  type='text/javascript'>
<!--
function tag(text1, text2)
{
if ((document.selection))
{
document.form.text.focus();
document.form.document.selection.createRange().text = text1+document.form.document.selection.createRange().text+text2;
} else document.form.text.value += text1+text2;
}
function click_link()
{
this.form.text.value = this.form.text.value + '<?php echo ">".wordwrap($str,60,"\\n>"); ?>';
}

//-->
</script>

Обсуждение

Неизвестный
20.09.2008, 17:06
общий
это ответ
Здравствуйте, Slo_nik!

вы в скрипте явно вбращаетесь к форме с именем text:
document.form.text поэтому в ней и происходят изменения.

кроме того ваш код будет работать исключительно в EI, что тоже минус.

я предлагаю запоминать последнюю форму для ввода текста которая получала фокус ввода и действия производить с ней, для этого добавить обработчики onFocus в интересующие поля:
<textarea cols="40" rows="10" name="text" onFocus="javascript:setLastFocused(this);"></textarea>
<textarea cols="40" rows="10" name="fulltext" onFocus="javascript:setLastFocused(this);"></textarea>

сам измененный скрипт в приложении. скрипт работает во всех текущих браузерах.


Приложение:
<script type='text/javascript'>
<!--
var clientPC = navigator.userAgent.toLowerCase();
var clientVer = parseInt(navigator.appVersion);
var is_ie = ((clientPC.indexOf("msie") != -1) && (clientPC.indexOf("opera") == -1));
var is_win = ((clientPC.indexOf("win") != -1) || (clientPC.indexOf("16bit") != -1));

var lasttextarea = '';
function setLastFocused(ta)
{
lasttextarea = ta;
}

function tag(text1, text2)
{
if(lasttextarea == '')
return;
lasttextarea.focus();

if((clientVer >= 4) && is_ie && is_win){
theSelection = document.selection.createRange().text;
if (theSelection) {
document.selection.createRange().text = text1 + theSelection + text2;
lasttextarea.focus();
return;
} else lasttextarea.value += text1 + text2;
}
else if(lasttextarea.selectionEnd && (lasttextarea.selectionEnd - lasttextarea.selectionStart > 0)){
var selLength = lasttextarea.textLength;
var selStart = lasttextarea.selectionStart;
var selEnd = lasttextarea.selectionEnd;
if (selEnd == 1 || selEnd == 2)
selEnd = selLength;

var s1 = (lasttextarea.value).substring(0, selStart);
var s2 = (lasttextarea.value).substring(selStart, selEnd)
var s3 = (lasttextarea.value).substring(selEnd, selLength);
lasttextarea.value = s1 + text1 + s2 + text2 + s3;
return;
}
else
{
lasttextarea.value += text1 + text2;
lasttextarea.focus();
}
}
//-->
</script>
Форма ответа