Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Из одного textarea в другой (https://javascript.ru/forum/dom-window/71460-iz-odnogo-textarea-v-drugojj.html)

Chile 20.11.2017 20:35

Из одного textarea в другой
 
Здравствуйте, товарищи! :)

У меня такая задача: есть форма с двумя textarea, в одном из них текст, нужно вручную выделить часть текста, нажать на кнопку и тогда выделение скопируется в другой textarea.

...

<textarea name="descr"></textarea>
<textarea name="text"></textarea>
<button>Вставить</button>

...


Как это можно сделать? Я в js слабо соображаю, но очень нужно сделать такую штуку. Помогите пожалуйста.

Chile 20.11.2017 23:28

Вот такой код вставляет только теги, а содержимое нет :(

<p><textarea id="text" name="description" rows="3" cols="150"></textarea></p>

<p><textarea id='comment3' name="txt" rows="20" cols="150"></textarea></p>
<input href="#" type="button" onClick='comm(3)' value="Прокомментировать" />

<script type="text/javascript">
var textarea=document.getElementById('text');
function comm(id) {
textarea.value+="[\quote]"+document.getElementById('comment'+id).innerHTML+"[\/quote]\n";
}
</script>


А хотелось бы, чтобы вместо тегов вставлял просто текст выделенный.

DynkanMaclaud 21.11.2017 00:25

Chile,
<textarea></textarea>
  <textarea id='target'></textarea>
  <button id='pasteButton'>Paste</button>
<script>
function copySelected(target) {
		if (target) {
    		const selectedText = document.getSelection().toString();
    		target.value = selectedText;
    }
};
pasteButton.addEventListener('click', () => copySelected(target));
</script>

Chile 21.11.2017 00:58

Попробовал пример — не работает. Может быть упустили что-то?

Chile 21.11.2017 01:02

Вот нашёл пример, но он вставляет выделение только <div>, а не textarea в textarea:

<body>
  <div class="post">Недавно в Chrome Web Store мне попалось приложение jsFiddle, проект британского программиста Piotr Zalewa
    aka @zalun. По-сути, это очередная песочница для web-программистов, но говоря «очередная» я не подразумеваю
    «никому не нужная». Я долго ждал момента, когда WYSIWYG заменят такие песочницы, и, похоже, дождался.</div>
  <a
  href="javascript: void(0);" onclick="quote_message();">цитировать выделенный текст</a>
    <form action="actions.php?new_message" name="usermessageform" method="post">
      <textarea cols="60" rows="20" wrap="VIRTUAL" id="message"></textarea>
    </form>
    <script>
      var selecttext;
      var  message = document.getElementById("message");
      (document.body || document.documentElement).onmouseup = function (e) {
        var el = e ? e.target : window.event.srcElement;
        if (el.tagName != 'DIV' || el.className != 'post') return;
        selecttext = '';
        if (window.getSelection) {
          selecttext = window.getSelection();
        } else if (document.getSelection) {
          selecttext = document.getSelection();
        } else if (document.selection) {
          selecttext = document.selection.createRange().text;
        }
      };
 
      function quote_message() {
        message.value+= selecttext;
        selecttext = '';
      }
    </script>
</body>

DynkanMaclaud 21.11.2017 01:06

Chile,
Напечатайте текст в первом textarea, выделите его и нажмите кнопку paste/// разве не так?

Chile 21.11.2017 01:12

Ну да, именно так:) Но, в вашем примере, в сообщении не работает. Работаю в Firefox.

рони 21.11.2017 01:15

Цитата:

Сообщение от Chile
Вот нашёл пример, но он вставляет выделение только <div>,

уберите строку 15

Chile 21.11.2017 01:22

Цитата:

Сообщение от рони (Сообщение 470831)
уберите строку 15

Теперь работает со всем подряд, но только не с textarea! :D

рони 21.11.2017 01:24

Цитата:

Сообщение от Chile
Теперь работает со всем подряд, но только не с textarea!

так измените эту строку как вам нужно :-?

Chile 21.11.2017 01:26

Вот так?

if (el.tagName != 'TEXTAREA') return;


не работает :(

рони 21.11.2017 02:26

копирование выделенного текста из textarea
 
Chile,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">

</head>

<body>
<body>
<textarea name="descr" cols="60" rows="10" >Недавно в Chrome Web Store мне попалось приложение jsFiddle, проект британского программиста Piotr Zalewa
    aka @zalun. По-сути, это очередная песочница для web-программистов, но говоря «очередная» я не подразумеваю
    «никому не нужная». Я долго ждал момента, когда WYSIWYG заменят такие песочницы, и, похоже, дождался</textarea>

<textarea name="text" cols="60" rows="10"></textarea>
<button type="button">цитировать выделенный текст</button>

    <script>
      var txt = '';
      var message = document.querySelector('[name="text"]');
      document.addEventListener('mouseup', function(event) {
          var el = event.target;
          if (el.tagName != 'TEXTAREA' && el.getAttribute('name') != 'descr') return;
          if (txt = window.getSelection) {
              txt = el.value.substring(el.selectionStart, el.selectionEnd);
          } else {
              txt = document.selection.createRange().text;
          }

      })
      document.querySelector('button').addEventListener('click', function(event) {
         message.value += txt;
          txt = '';
      })
    </script>
</body>


</body>
</html>

Chile 21.11.2017 02:35

рони, спасибо вам большое! А я уже начал было копать в гугле как заставить работать именно с textarea, так как решил, что не работает, поскольку она теряет фокус при нажатии на кнопку:)

Chile 21.11.2017 11:54

У меня тут ещё вопросик. А как сделать, чтобы перед вставкой текста, вставлялся ещё одиночный тег <img src="" alt="" />?

Вот так попробовал, но вставляет только тег:

...

document.querySelector('button]').addEventListener('click', function(event) {
   message.value += '<img src="" alt="" />' + txt;
      txt = '';
})

...

рони 21.11.2017 12:03

Chile,
что не так??
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">

</head>

<body>
<body>
<textarea name="descr" cols="60" rows="10" >Недавно в Chrome Web Store мне попалось приложение jsFiddle, проект британского программиста Piotr Zalewa
    aka @zalun. По-сути, это очередная песочница для web-программистов, но говоря «очередная» я не подразумеваю
    «никому не нужная». Я долго ждал момента, когда WYSIWYG заменят такие песочницы, и, похоже, дождался</textarea>

<textarea name="text" cols="60" rows="10"></textarea>
<button type="button">цитировать выделенный текст</button>

    <script>
      var txt = '';
      var message = document.querySelector('[name="text"]');
      document.addEventListener('mouseup', function(event) {
          var el = event.target;
          if (el.tagName != 'TEXTAREA' && el.getAttribute('name') != 'descr') return;
          if (txt = window.getSelection) {
              txt = el.value.substring(el.selectionStart, el.selectionEnd);
          } else {
              txt = document.selection.createRange().text;
          }

      })
      document.querySelector('button').addEventListener('click', function(event) {
         message.value += '<img src="" alt="" />'+txt;
          txt = '';
      })
    </script>
</body>


</body>
</html>

Chile 21.11.2017 12:13

Работает теперь. Не пойму в чём была беда:) Ещё раз огромное спасибо!

NeoN 21.11.2017 12:40

беда была в селекторе кнопки видимо querySelector('button]')

Chile 21.11.2017 15:02

Друзья, я вероятно уже достал всех своим поразительным нубством, но… Я тут подумал: а можно ли сделать кнопку неактивной, пока не выделен текст для отправки? Если это не сложно, помогите пожалуйста. Если требует много времени, не стоит, а то я и так уже злоупотребил гостеприимством:)

рони 21.11.2017 16:01

Chile,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">

</head>

<body>
<body>
<textarea name="descr" cols="60" rows="10" >Недавно в Chrome Web Store мне попалось приложение jsFiddle, проект британского программиста Piotr Zalewa
    aka @zalun. По-сути, это очередная песочница для web-программистов, но говоря «очередная» я не подразумеваю
    «никому не нужная». Я долго ждал момента, когда WYSIWYG заменят такие песочницы, и, похоже, дождался</textarea>

<textarea name="text" cols="60" rows="10"></textarea>
<button type="button" class="quote" >цитировать выделенный текст</button>

    <script>
      var txt = '';
      var message = document.querySelector('[name="text"]');
      var button = document.querySelector('.quote');
      document.addEventListener('mouseup', function(event) {
          var el = event.target;
          if (el.tagName != 'TEXTAREA' && el.getAttribute('name') != 'descr') return;
          if (txt = window.getSelection) {
              txt = el.value.substring(el.selectionStart, el.selectionEnd);
          } else {
              txt = document.selection.createRange().text;
          }
          dis()
      })
      button.addEventListener('click', function(event) {
         message.value += '<img src="" alt="" />'+txt;
         txt = '';
         dis()
      })
      function dis()
      {
         if(txt) button.removeAttribute('disabled');
         else button.setAttribute('disabled', 'disabled')
      }
      dis()
    </script>
</body>


</body>
</html>

Chile 21.11.2017 16:13

рони, спасибо! Всё отлично работает.:)


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