Проблема с 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;} |
Цитата:
Ну так в этой и не работать. Это вот что document.forms['comment']['comess']; по id берет? Ну и берет одну, какая первая по такому id попалась. Если других форм нету, то просто бери текстарию как таковую var tas=document.querySelectorAll('textarea'); tas[0] = первая, tas[1] - второй текстарий |
а как решить проблему? я просто в js не разбираюсь
|
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,
Ты даже id у формы не можешь поменять штоле? Ну тогда тебе в собес. ))) |
подскажи, я не знаю как это делать
|
Не умеешь набирать тексты на клаве?
Короче. Юзер не может писать одновременно в двух формах. Следовательно работай с той, с которой приходят события. То есть нажал юзер кнопку вставить бб-код - находишь нужную форму и вставляешь. Кнопки находятся рядом с формой, следовательно через общего родителя, типа еvent.target.closest('form') или любым другим способом, можно найти ту форму, к которой относится эта кнопка. |
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. |