Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вставка текста в textarea в popup форме (https://javascript.ru/forum/misc/66409-vstavka-teksta-v-textarea-v-popup-forme.html)

KEMPZOR 13.12.2016 22:42

Вставка текста в textarea в popup форме
 
Здравствуйте уважаемые господа. Нужна ваша помощь. Есть на сайте всплывающая popup форма. Хочу сделать так, чтобы по клику на кнопку <a href..... всплывала форма с вставленным произвольным текстом текстом в textarea.

Если вставить в консоль
document.getElementById("d[2]").value = "Johnny Bravo";
то всё работает. Подскажите пожалуйста куда копать ?

Вот поле куда нужно вставить
<textarea name="d[2]" id="d[2]" required=""></textarea>

Кнопка
<a class="form-button" href="#" onclick="myFunction()">КНОПКА</a>


<script>
function myFunction() {
    document.getElementById("d[2]").value = "Johnny Bravo";
}
</script>

ksa 14.12.2016 08:49

Цитата:

Сообщение от KEMPZOR
Подскажите пожалуйста куда копать ?

Так ты вроде уже выкопал, не? :blink:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<!--
<script src='http://code.jquery.com/jquery-latest.js'></script>
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
function myFunction() {
    document.getElementById("d[2]").value = "Johnny Bravo";
};
</script>
</head>
<body>
<a class="form-button" href="#" onclick="myFunction()">КНОПКА</a>
<textarea name="d[2]" id="d[2]" required=""></textarea>
</body>
</html>

KEMPZOR 14.12.2016 10:23

Цитата:

Сообщение от ksa (Сообщение 437953)
Так ты вроде уже выкопал, не? :blink:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<!--
<script src='http://code.jquery.com/jquery-latest.js'></script>
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
function myFunction() {
    document.getElementById("d[2]").value = "Johnny Bravo";
};
</script>
</head>
<body>
<a class="form-button" href="#" onclick="myFunction()">КНОПКА</a>
<textarea name="d[2]" id="d[2]" required=""></textarea>
</body>
</html>

Вот только у меня пишет test4:495 Uncaught TypeError: Cannot set property 'value' of null(…)myFunction @ test4:495onclick @ test4:499

Я так понимаю скрипт MyFunction загружается раньше чем всплывающее окно ?

Если просто в консоль вставить
document.getElementById("d[2]").value = "Johnny Bravo";
то работает.

Если так
function myFunction() {
    document.getElementById("d[2]").value = "Johnny Bravo";
};
то пишет undefined.

ksa 14.12.2016 10:25

Цитата:

Сообщение от KEMPZOR
Я так понимаю скрипт MyFunction загружается раньше чем всплывающее окно ?

Как это именно у тебя я не вкурсе... :no:

KEMPZOR 14.12.2016 11:12

Цитата:

Сообщение от ksa (Сообщение 437959)
Как это именно у тебя я не вкурсе... :no:

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

laimas 14.12.2016 11:29

Это из-за квадратных скобок. Можно так:

document.querySelector('form').elements['d[2]'].value

KEMPZOR 14.12.2016 11:37

Цитата:

Сообщение от laimas (Сообщение 437968)
Это из-за квадратных скобок. Можно так:

document.querySelector('form').elements['d[2]'].value

Вставил вот так
<script type='text/javascript'>
function myFunction() {
    document.querySelector('form').elements['d[2]'].value = "Johnny Bravo";
};
</script>

<a href="#" class="form-button" onclick="myFunction()">КНОПКА</a>

Не получается, пишет ошибку test10:360 Uncaught TypeError: Cannot read property 'elements' of null.

laimas 14.12.2016 11:39

<html> 
<body>
<form>
<input name="d[2]" />
</form>
<script> 
document.querySelector('form').elements['d[2]'].value = 't'
</script>
</body> 
</html>


Ошибки есть?

KEMPZOR 14.12.2016 11:46

Цитата:

Сообщение от laimas (Сообщение 437971)
<html> 
<body>
<form>
<input name="d[2]" />
</form>
<script> 
document.querySelector('form').elements['d[2]'].value = 't'
</script>
</body> 
</html>


Ошибки есть?

Uncaught TypeError: Cannot read property 'elements' of null

laimas 14.12.2016 12:28

Мне ваши 404 по ссылке не нужны.

Жмем здесь на примере кода "Просмотреть", и ... ошибки есть?
Вот и на сайте своем делайте подобным образом, только не "один к одному" с примером, а используя реальный селектор доступа к своей форме.

KEMPZOR 14.12.2016 12:43

Извиняюсь за непонимание, только недавно начал постигать.:help:

Вот этот код вызывает форму, подскажите пожалуйста как корректно вставить.
<script type="text/javascript">
    $(function() {
    	
 	//Form
    var $form_link = $('.form-button'),
        $form = $('#form_product');

    $form_link.click(function(event) {
    	
        event.preventDefault();
        
        if ($form.hasClass('opened')){
            $form.removeClass('opened');
            
            if (/iPod|iPad|iPhone/i.test(navigator.userAgent)) {
                $('html').removeClass('overflowHidden');
            } else {
                $(document.documentElement).removeClass('overflowHidden');
            }
        } else {
            $form.addClass('opened');

            if (/iPod|iPad|iPhone/i.test(navigator.userAgent)) {
                $('html').addClass('overflowHidden');
                $('body').addClass('overflowHidden');
            } else {
                $(document.documentElement).addClass('overflowHidden');
            }
        }

        $('.popup-form').s3IncludeForm('/forma' + '?form', function(){
	 	  if($('input[type="text"]').val() == '') {
	 		$('input[type="text"]').parent().find('.placeholder').show();
	   	  }
	    });
        return false; 

    });

    $(".close-reveal-modal").on('click touchstart', function(event) {
      	$form.removeClass('opened');
    });

});
  </script>

Dilettante_Pro 14.12.2016 13:20

KEMPZOR,
В вашем примере по ссылке скрипт выполняется при загрузке кода страницы до загрузки формы - отсюда и ошибка.
Прочтите (внимательно!) свой пост№1 и пост№2 от ksa и подумайте - почему у него работает, а у вас - нет.

laimas 14.12.2016 13:21

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

Еще раз о том, о чем была суть вопроса - невозможно обратиться к объекту, если в значении селектора по которому производится поиск присутствуют квадратные скобки.

Как это можно вылечить используя DOM и было показано. У вас код выше использует jQuey, а значит в нем достучаться до поля с именем d[2] можно так - $('[name="d\\[2\\]"]').val('значение')

Что еще пояснять?

KEMPZOR 14.12.2016 13:50

Цитата:

Сообщение от laimas (Сообщение 437979)
Вы задаете один вопрос с описанием проблемы, а код показываете размером с портянку.

Еще раз о том, о чем была суть вопроса - невозможно обратиться к объекту, если в значении селектора по которому производится поиск присутствуют квадратные скобки.

Как это можно вылечить используя DOM и было показано. У вас код выше использует jQuey, а значит в нем достучаться до поля с именем d[2] можно так - $('[name="d\\[2\\]"]').val('значение')

Что еще пояснять?

<form>
<input name="d[2]" />
</form>

<script type='text/javascript'>
    $('[name="d\\[2\\]"]').val('значение')
</script>


Вот такая конструкция работает. Но вот если по кнопке, то значение как бы видно на долю секунды и потом оно исчезает.

Dilettante_Pro 14.12.2016 14:03

KEMPZOR,
Цитата:

Сообщение от KEMPZOR
Но вот если по кнопке, то значение как бы видно на долю секунды и потом оно исчезает.

<!DOCTYPE html>
<html>
<head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <script>
        $(function () {

            $('.form-button').on('click', function () {
                   $("#d\\[2\\]").val("Johnny Bravo");
            });
        })
    </script>
</head>
<body>
    <a class="form-button" href="#">КНОПКА</a>
    <textarea name="d[2]" id="d[2]" required=""></textarea>
</body>
</html>

KEMPZOR 14.12.2016 16:09

Цитата:

Сообщение от Dilettante_Pro (Сообщение 437983)
KEMPZOR,


<!DOCTYPE html>
<html>
<head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <script>
        $(function () {

            $('.form-button').on('click', function () {
                   $("#d\\[2\\]").val("Johnny Bravo");
            });
        })
    </script>
</head>
<body>
    <a class="form-button" href="#">КНОПКА</a>
    <textarea name="d[2]" id="d[2]" required=""></textarea>
</body>
</html>

Да, это работает на странице, вот только в popup окне не появляется.:(

Dilettante_Pro 14.12.2016 16:34

KEMPZOR,
Цитата:

Сообщение от KEMPZOR
Да, это работает на странице, вот только в popup окне не появляется.

тут весь вопрос в том, где и когда появляется у вас это поле textarea name="d[2]" id="d[2]". И запись в него должна стоять после этого момента.
М.б. перед return false (строка 36 в пост#11)

KEMPZOR 14.12.2016 16:51

Цитата:

Сообщение от Dilettante_Pro (Сообщение 438010)
KEMPZOR,

тут весь вопрос в том, где и когда появляется у вас это поле textarea name="d[2]" id="d[2]". И запись в него должна стоять после этого момента.
М.б. перед return false (строка 36 в пост#11)

Спасибо за подсказку, попробую проверить.

Отлично, заработало, низкий вам поклон!

laimas 14.12.2016 16:54

Цитата:

Сообщение от KEMPZOR
name="d[2]" id="d[2]".

Зачем id="d[2]" если достаточно и name="d[2]"?

KEMPZOR 14.12.2016 17:07

Цитата:

Сообщение от laimas (Сообщение 438018)
Зачем id="d[2]" если достаточно и name="d[2]"?

Сайт на megagroup.ru, это всё у них с коробки.

laimas 14.12.2016 17:10

Какая разница на чем сайт расположен, я спрашиваю - зачем плодить еще и ID с "проблемным" же именованием? Ну коли есть проблемы с name="d[2]", хотя под JQ, это не проблема, и используется ID, тогда и именуйте его иначе, без использования квадратных скобок. Что нельзя просто id="d2" в таком случае? Какой смысл наступать на грабли второй раз?


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