Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вставка текста при клике (https://javascript.ru/forum/misc/42657-vstavka-teksta-pri-klike.html)

grisha2217 04.11.2013 19:53

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

<form class="vbform" name="quick_reply" id="quick_reply">
<textarea dir="ltr" tabindex="-1" role="textbox"></textarea>
</form>

Faab 04.11.2013 21:35

А где ссылка?

grisha2217 04.11.2013 22:35

Faab, дак ссылка обычная же должна быть. <a href="#" onlick=здесь функция">

JS код дайте мне, пожалуйста

Faab 04.11.2013 23:33

<script>
function insertText() {  
    var formObject = document.getElementById("quick_reply");
    console.log('1 ' + formObject);
    if(formObject){
      textareaObject = formObject[0];
        if(textareaObject){
          var text = document.createTextNode('Your text'); // Тут ваш текст
          textareaObject.appendChild(text);
          // console.log('child : ' + textareaObject);
        };
    };
 };
</script>


<a href="#" onclick="insertText()">insert</a>

BETEPAH 04.11.2013 23:42

<form class="vbform" name="quick_reply" id="quick_reply">
	<textarea dir="ltr" tabindex="-1" role="textbox"></textarea>
</form>
<span id="pseudolink">Нажми сюда!</span>
<script>
document.getElementById('pseudolink').onclick = function() {
	var text = 'Это вставляемый текст ';
	document.getElementById('quick_reply').getElementsByTagName('textarea')[0].value += text;
}
</script>

Faab 04.11.2013 23:44

У меня вопрос к знатокам, почему я не могу подцепить элемент textarea через getElementsByTagName(). Пример:

function insertText() {  
    var formObject = document.getElementById("quick_reply");
    // console.log('parent : ' + formObject);
    if(formObject){
      textareaObject = formObject.getElementsByTagName("textarea")[0];
      console.log('child : ' + textareaObject); // выводит undefined
      /*
      textareaObject = formObject[0];
      if(textareaObject){
        var text = document.createTextNode('Your text'); // Тут ваш текст
        textareaObject.appendChild(text);
        // console.log('child : ' + textareaObject);
      };
      */
    };
  };

danik.js 04.11.2013 23:49

Цитата:

Сообщение от Faab
У меня вопрос к знатокам, почему я не могу подцепить элемент textarea через getElementsByTagName(). Пример:

В предыдущем комментарии этот метод прекрасно работает, не видишь что-ли?

Faab 04.11.2013 23:50

Цитата:

Сообщение от BETEPAH (Сообщение 279536)
getElementsByTagName('textarea')[0].value += text;

Мне интересна мелочь: прибавление (+=) тут принципиально? Заранее спасибо

BETEPAH 04.11.2013 23:54

Цитата:

Сообщение от Faab
прибавление (+=) тут принципиально?

не принципиально. Текст будет добавляться к уже имеющемуся. Попробуйте покликать несколько раз. Если написать просто ( = ), то текст будет заменяться.

Faab 04.11.2013 23:59

Цитата:

Сообщение от danik.js (Сообщение 279540)
В предыдущем комментарии этот метод прекрасно работает, не видишь что-ли?

Поэтому и задаю вопрос, что не понимаю откуда у меня undefined.. я не вижу принципиальной разницы со своим кодом, ну кроме value конечно.

function insertText() {  
    var formObject = document.getElementById("quick_reply");
    if(formObject){
      textareaObject = formObject.getElementsByTagName("textarea")[0];
      console.log('child : ' + textareaObject); // undefined
    };
  };

BETEPAH 05.11.2013 00:14

Не знаю, у меня нормально работает ваш код
В консоли: child : [object HTMLTextAreaElement]
<form class="vbform" name="quick_reply" id="quick_reply">
<textarea dir="ltr" tabindex="-1" role="textbox"></textarea>
</form>
<a href="#" onclick="insertText(); return false">insert</a>
<script>
function insertText() {  
    var formObject = document.getElementById("quick_reply");
    if(formObject){
      textareaObject = formObject.getElementsByTagName("textarea")[0];
      console.log('child : ' + textareaObject);
    };
  };
</script>

grisha2217 05.11.2013 12:30

Не знаю почему, но код не хочет выполняться. Может быть, потому что у textarea нету атрибута name?

Faab 05.11.2013 13:47

Тестируй поэтапно.

Сначало убедитесь что скрипт подключён.
Подстраховка: убедитесь что скрипт начинает работу после загрузки всей страницы.
Ну и далее отслеживайте каждый этап.

grisha2217 05.11.2013 15:00

Цитата:

Сообщение от Faab (Сообщение 279611)

Сначало убедитесь что скрипт подключён.
Подстраховка: убедитесь что скрипт начинает работу после загрузки всей страницы.
Ну и далее отслеживайте каждый этап.

Да, скрипт подключен:


А как мне узнать, начинает ли скрипт работу после загрузки всей страницы?

Faab 05.11.2013 15:17

JS
window.onload=function(){
  // тут скрипт
}


JQuery
$(document).ready(function(){
  // тут скрипт
});


А вообще яндекс вам тоже бы помог с этим вопросом.

danik.js 05.11.2013 15:29

Faab, функция отрабатывает по событию клика. К тому моменту уже все загружено ведь :)
grisha2217,
Приведи полный листинг своего html-файла. От и до. Только не идиотским скриншотом!

grisha2217 05.11.2013 15:45

Вложений: 1
danik.js, файл во вложениях

Faab 05.11.2013 16:13

А вы в консоле точно смотрели результаты скрипта?

Замените в вашем скрепте строчки:
var formObject = document.getElementById("quick_reply");
    if(formObject){
      textareaObject = formObject.getElementsByTagName("textarea")[0];
      console.log('child : ' + textareaObject);
};

на
var text = 'Это вставляемый текст ';
document.getElementById('quick_reply').getElementsByTagName('textarea')[0].value += text;


Вы вставили отладочный скрипт, а не готовый вариант.

grisha2217 05.11.2013 16:33

Faab, как это посмотреть?

Я эту консоль открыл, не знаю, что делать дальше


Faab 05.11.2013 16:35

кликните "консоль" :) Console

grisha2217 05.11.2013 19:34

Хах, интересный случай.

Когда нажимаешь на ссылку ничего не происходит, методом тыка я убрал return false.

Т.е. получилось так:
<a href="#" onclick="insertText();">insert</a>



Я кликаю по ссылке - скрипт перемещает меня на главную, я нажимаю кнопку назад и уже там появляется текст.

BETEPAH 05.11.2013 23:44

grisha2217,
Используйте <a> по назначению. А для навешивания событий есть куча других элементов. И тогда не нужно будет return false

grisha2217 06.11.2013 17:11

BETEPAH, проблема осталась.

Заменил <a> на <span>. Кликаю - ничего не происходит. Жму быстро назад, а потом вперед, в итоге текст появляется.

Как быть?

Faab 06.11.2013 17:34

Выложи снова свой скрипт + html... Хочется посмотреть на новые свойства элемента span

grisha2217 06.11.2013 18:24

Вложений: 1
Faab, во вложениях.

(Поиск: Insert!) Рядом будет скрипт

Faab 06.11.2013 18:46

...

grisha2217 06.11.2013 19:46

Faab, может скажете, что не так?

Faab 06.11.2013 19:51

У меня всё работает. Попробуйте так, хотя должно было и так работать:

<span style="padding-left:0; cursor: pointer;" id="spanButton" >Insert!</span>
<script>
window.onload = function(){
 var eSpanButton = document.getElementById('spanButton');
 eSpanButton.onclick = function(){
  var text = 'TESTTEXT';
  document.getElementById('quick_reply').getElementsByTagName('textarea')[0].value += text;
 };
};
</script>


В консоле сообщений об ошибках нет? У вас столько скриптов - сам чёрт ногу сломит.

Faab 06.11.2013 19:54

Цитата:

Сообщение от BETEPAH (Сообщение 279545)
Не знаю, у меня нормально работает ваш код
В консоли: child : [object HTMLTextAreaElement]

В файле, в котором я тестировал этот скрипт, в совершенно другом месте была HTML-ошибка, поэтому у меня скрипт работал не правильно.

grisha2217 06.11.2013 20:02

Faab, это же целый движок

теперь вообще не работает. В консоли только ошибки CSS

Скорее всего, проблема вовсе не в скрипте, а из-за движка. Видимо, мешают какие-то функции

Faab 06.11.2013 20:03

У меня работает... в консоле точно нет сообщений об ошибках?

Faab 06.11.2013 20:10

Для теста создайте чистую HTML-страничку и пропишите:

<script>
window.onload = function(){
 var eSpanButton = document.getElementById('spanButton');
 eSpanButton.onclick = function(){
  var text = 'TESTTEXT';
  document.getElementById('quick_reply').getElementsByTagName('textarea')[0].value += text;
 };
};
</script>
<span style="padding-left:0; cursor: pointer;" id="spanButton" >Insert!</span>
<form class="vbform" name="quick_reply" id="quick_reply" >
  <textarea dir="ltr" tabindex="-1" role="textbox"></textarea>
</form>

grisha2217 06.11.2013 20:13

Faab, на тестовой страничке все прекрасно работает.

Блин, может мне вам ссылку с тестовым аккаунтом скинуть? Глянете...

Faab 06.11.2013 20:16

Нусс.. перебирайте движок. И в третий раз, ещё раз посоветую: заглядываете в консоль, если работаете с JS.

grisha2217 06.11.2013 20:21

Faab, спасибо. Учту.

Faab 06.11.2013 20:50

Цитата:

Сообщение от grisha2217 (Сообщение 279879)
Faab, на тестовой страничке все прекрасно работает.

Блин, может мне вам ссылку с тестовым аккаунтом скинуть? Глянете...

у вас там реально каша... надо смотреть что за скрипты вы ставили, в чём конфликт...

Попробуйте начать сначала, и устанавливать скрипты по очереди.. если не вариант, то зайдите на ветку "работа". За небольшую плату вам найдут ошибку.. поторгуетесь если что, они тоже люди )).

grisha2217 06.11.2013 23:23

Faab, сторонних скриптов там очень мало, это ссылка на источник, подгрузка страницы на jquery и spoiler,а остальное относится к движку

Valewar 05.02.2014 18:28

А может кто-нибудь тут подсказать ответ?
http://javascript.ru/forum/showthread.php?p=296090


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