Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.07.2016, 09:50
Профессор
Отправить личное сообщение для porezon Посмотреть профиль Найти все сообщения от porezon
 
Регистрация: 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;}
Ответить с цитированием
  #2 (permalink)  
Старый 30.07.2016, 09:56
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 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.
Ответить с цитированием
  #3 (permalink)  
Старый 30.07.2016, 12:00
Профессор
Отправить личное сообщение для porezon Посмотреть профиль Найти все сообщения от porezon
 
Регистрация: 09.01.2013
Сообщений: 167

а как решить проблему? я просто в js не разбираюсь
Ответить с цитированием
  #4 (permalink)  
Старый 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>
Ответить с цитированием
  #5 (permalink)  
Старый 30.07.2016, 18:38
Профессор
Отправить личное сообщение для porezon Посмотреть профиль Найти все сообщения от porezon
 
Регистрация: 09.01.2013
Сообщений: 167

не совсем вариант, бб коды у меня подружаются с файла, если там поменяю то в одну форму вставляется
Ответить с цитированием
  #6 (permalink)  
Старый 30.07.2016, 19:31
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сообщение от porezon
не совсем вариант, бб коды у меня подружаются с файла, если там поменяю то в одну форму вставляется
не осилил
Ответить с цитированием
  #7 (permalink)  
Старый 31.07.2016, 00:03
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

porezon,

Ты даже id у формы не можешь поменять штоле? Ну тогда тебе в собес. )))
Ответить с цитированием
  #8 (permalink)  
Старый 31.07.2016, 10:39
Профессор
Отправить личное сообщение для porezon Посмотреть профиль Найти все сообщения от porezon
 
Регистрация: 09.01.2013
Сообщений: 167

подскажи, я не знаю как это делать
Ответить с цитированием
  #9 (permalink)  
Старый 31.07.2016, 12:23
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

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

Короче. Юзер не может писать одновременно в двух формах. Следовательно работай с той, с которой приходят события. То есть нажал юзер кнопку вставить бб-код - находишь нужную форму и вставляешь. Кнопки находятся рядом с формой, следовательно через общего родителя, типа еvent.target.closest('form') или любым другим способом, можно найти ту форму, к которой относится эта кнопка.
Ответить с цитированием
  #10 (permalink)  
Старый 31.07.2016, 12:29
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 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.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
js стиль render для react.js vflash Ваши сайты и скрипты 5 01.04.2016 22:57
Проблема с радио кнопками px379 Общие вопросы Javascript 8 29.07.2013 09:30
Проблема с слайдером/комментариями на сайте, js . failure Элементы интерфейса 4 22.07.2013 01:36
Вставка кода js с помощью js Alice Общие вопросы Javascript 1 12.06.2013 19:05
Js + Ie7 проблема onuvidelsolnce Internet Explorer 4 28.03.2011 20:21