30.07.2016, 09:50
|
Профессор
|
|
Регистрация: 09.01.2013
Сообщений: 167
|
|
Проблема с js
Здравствуйте!
Есть такая проблема делаю на сайте bb коды,
и есть функция которая их добавляет в textarea
но проблема в том что я создал 2 формы для отправки, вверху страницы в низу страницы, формы полностью идентичный, НО почему-то бб коды вставляются только в верхнюю форму.
может кто помочь?
<form id="comment" name="commentfrm" method="POST" action="">
<div class="obvodka">
<div class="tema">Ваш комментарий</div>
<table class="forum2">
<tbody>
<tr>
<td colspan="2">
<div class='edit_b'>
<div class="editor_button" onclick="insert_comm('[b]','[/b]');">B</div>
<div class="editor_button" onclick="insert_comm('[i]','[/i]');">I</div>
<div class="editor_button" onclick="insert_comm('[u]','[/u]');">U</div>
<tr>
<td colspan="2">
<textarea cols="40" rows="10" id="comess" name="com_desc" class="clatextarea"></textarea>
</td></tr>
</table>
</form>
function insert_comm(open, close, no_focus)
{
msgfield = (document.all) ? document.all.comess : document.forms['comment']['comess'];
if (document.selection && document.selection.createRange)
{
if (no_focus != '1' ) msgfield.focus();
sel = document.selection.createRange();
sel.text = open + sel.text + close;
if (no_focus != '1' ) msgfield.focus();
}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;
document.getElementById('box').style.display='none';
document.getElementById('outbox').style.display='none';
document.getElementById('outbox').innerHTML='';
if (no_focus != '1' ) msgfield.focus();
}else{
msgfield.value += open + close;
if (no_focus != '1' ) msgfield.focus();
}return;}
|
|
30.07.2016, 09:56
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Сообщение от porezon
|
формы полностью идентичный
|
Ну так в этой и не работать. Это вот что document.forms['comment']['comess']; по id берет? Ну и берет одну, какая первая по такому id попалась.
Если других форм нету, то просто бери текстарию как таковую
var tas=document.querySelectorAll('textarea');
tas[0] = первая, tas[1] - второй текстарий
Последний раз редактировалось warren buffet, 30.07.2016 в 09:58.
|
|
30.07.2016, 12:00
|
Профессор
|
|
Регистрация: 09.01.2013
Сообщений: 167
|
|
а как решить проблему? я просто в js не разбираюсь
|
|
30.07.2016, 14:13
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
porezon,
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
</style>
<script>
function insert_comm(num,open, close, no_focus)
{
msgfield = document.querySelectorAll('.clatextarea')[num];
if (document.selection && document.selection.createRange)
{
if (no_focus != '1' ) msgfield.focus();
sel = document.selection.createRange();
sel.text = open + sel.text + close;
if (no_focus != '1' ) msgfield.focus();
}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;
document.getElementById('box').style.display='none';
document.getElementById('outbox').style.display='none';
document.getElementById('outbox').innerHTML='';
if (no_focus != '1' ) msgfield.focus();
}else{
msgfield.value += open + close;
if (no_focus != '1' ) msgfield.focus();
}return;}
</script>
</head>
<body>
<form id="comment" name="commentfrm" method="POST" action="">
<div class="obvodka">
<div class="tema" >Ваш комментарий</div>
<table class="forum2">
<tbody>
<tr>
<td colspan="2">
<div class='edit_b'>
<div class="editor_button" onclick="insert_comm(0,'[b]','[/b]');">B</div>
<div class="editor_button" onclick="insert_comm(0,'[i]','[/i]');">I</div>
<div class="editor_button" onclick="insert_comm(0,'[u]','[/u]');">U</div>
<tr>
<td colspan="2">
<textarea cols="40" rows="10" id="comess" name="com_desc" class="clatextarea"></textarea>
</td></tr>
</table>
</form>
<form id="comment" name="commentfrm" method="POST" action="">
<div class="obvodka">
<div class="tema" >Ваш комментарий</div>
<table class="forum2">
<tbody>
<tr>
<td colspan="2">
<div class='edit_b'>
<div class="editor_button" onclick="insert_comm(1,'[b]','[/b]');">B</div>
<div class="editor_button" onclick="insert_comm(1,'[i]','[/i]');">I</div>
<div class="editor_button" onclick="insert_comm(1,'[u]','[/u]');">U</div>
<tr>
<td colspan="2">
<textarea cols="40" rows="10" id="comess" name="com_desc" class="clatextarea"></textarea>
</td></tr>
</table>
</form>
</body>
</html>
|
|
30.07.2016, 18:38
|
Профессор
|
|
Регистрация: 09.01.2013
Сообщений: 167
|
|
не совсем вариант, бб коды у меня подружаются с файла, если там поменяю то в одну форму вставляется
|
|
30.07.2016, 19:31
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Сообщение от porezon
|
не совсем вариант, бб коды у меня подружаются с файла, если там поменяю то в одну форму вставляется
|
не осилил
|
|
31.07.2016, 00:03
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
porezon,
Ты даже id у формы не можешь поменять штоле? Ну тогда тебе в собес. )))
|
|
31.07.2016, 10:39
|
Профессор
|
|
Регистрация: 09.01.2013
Сообщений: 167
|
|
подскажи, я не знаю как это делать
|
|
31.07.2016, 12:23
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Не умеешь набирать тексты на клаве?
Короче. Юзер не может писать одновременно в двух формах. Следовательно работай с той, с которой приходят события. То есть нажал юзер кнопку вставить бб-код - находишь нужную форму и вставляешь. Кнопки находятся рядом с формой, следовательно через общего родителя, типа еvent.target.closest('form') или любым другим способом, можно найти ту форму, к которой относится эта кнопка.
|
|
31.07.2016, 12:29
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
id просто выкини, они не нужны. Напиши вот так:
<div class="editor_button" onclick="insert_comm(this,'b');">B</div>
Соответственно:
function insert_comm(el,code){
var form = el.closest('form'),
open='['+code+']',
close='[/'+code+']',
/* далее вся тряхомудия */
}
И вообще код гавно, поищи библиотеку бб-кодов и приделай к себе.
ЗЫ, передавать код даже не обязательно кстате.
<div class="editor_button" onclick="insert_comm(this);">B</div>
function insert_comm(el){
var form = el.closest('form'),
code=el.textContent, /* Если там больше чем одна буква кода, то юзай аттрибуты типа data-code */
open='['+code+']',
close='[/'+code+']',
}
Последний раз редактировалось warren buffet, 31.07.2016 в 12:33.
|
|
|
|