Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проблема с js (https://javascript.ru/forum/misc/64258-problema-s-js.html)

porezon 30.07.2016 09:50

Проблема с 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;}

warren buffet 30.07.2016 09:56

Цитата:

Сообщение от porezon
формы полностью идентичный


Ну так в этой и не работать. Это вот что document.forms['comment']['comess']; по id берет? Ну и берет одну, какая первая по такому id попалась.

Если других форм нету, то просто бери текстарию как таковую

var tas=document.querySelectorAll('textarea');

tas[0] = первая, tas[1] - второй текстарий

porezon 30.07.2016 12:00

а как решить проблему? я просто в js не разбираюсь

рони 30.07.2016 14:13

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>

porezon 30.07.2016 18:38

не совсем вариант, бб коды у меня подружаются с файла, если там поменяю то в одну форму вставляется

рони 30.07.2016 19:31

Цитата:

Сообщение от porezon
не совсем вариант, бб коды у меня подружаются с файла, если там поменяю то в одну форму вставляется

не осилил

warren buffet 31.07.2016 00:03

porezon,

Ты даже id у формы не можешь поменять штоле? Ну тогда тебе в собес. )))

porezon 31.07.2016 10:39

подскажи, я не знаю как это делать

warren buffet 31.07.2016 12:23

Не умеешь набирать тексты на клаве?

Короче. Юзер не может писать одновременно в двух формах. Следовательно работай с той, с которой приходят события. То есть нажал юзер кнопку вставить бб-код - находишь нужную форму и вставляешь. Кнопки находятся рядом с формой, следовательно через общего родителя, типа еvent.target.closest('form') или любым другим способом, можно найти ту форму, к которой относится эта кнопка.

warren buffet 31.07.2016 12:29

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+']',

}


Часовой пояс GMT +3, время: 01:50.