Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Передать параметр из метода prompt в форму отправки (https://javascript.ru/forum/events/67821-peredat-parametr-iz-metoda-prompt-v-formu-otpravki.html)

phenix79 10.03.2017 12:28

Передать параметр из метода prompt в форму отправки
 
Добрый день, подскажите пожалуйста кто-нибудь.
У меня есть форма отправки
<form id="createInterview" method="POST" action="create_interview.php">
    <input type="hidden" name="hidden" value="">
    <p>Ваше имя: <input type="text" name="name" /></p>

    <p><input type="submit" id="send" /></p>
</form>


и есть JS функция которая вызывается при нажатии определенной клавиши
function Send() {
           var opros = prompt('Создайте имя опроса');
               if (opros != null) {
                  var doc= document.getElementsByName('hidden');
                  doc.value = opros.value;
                  document.getElementById('createInterview').submite();
               } else {

                  Send();
               }
           }


Как видно выше в форме имеется скрытый инпут
<input type="hidden" name="hidden" value="">

в котором атрибут value="" пустое.

Вопрос, как можно перед отправкой формы передать в параметр атрибута value="введенный текст из prompt" введенный текст, из метода PROMPT?
Пытался сделать как написано выше, но не получается, подскажите пожалуйста, как это сделать?

Manyasha 10.03.2017 13:27

phenix79, здравствуйте.
getElementsByName возвращает коллекцию.
var doc = document.querySelector("#createInterview>[name='hidden']")

ksa 10.03.2017 13:37

Цитата:

Сообщение от phenix79
var doc= document.getElementsByName('hidden');

Если больше элементов с таким именем нет - сойдет и так

var doc= document.getElementsByName('hidden')[0];

phenix79 10.03.2017 15:16

Цитата:

Сообщение от Manyasha (Сообщение 446907)
phenix79, здравствуйте.
getElementsByName возвращает коллекцию.
var doc = document.querySelector("#createInterview>[name='hidden']")

При отправке формы выдал вот это 'hidden' has 'undefined'((

phenix79 10.03.2017 15:18

Цитата:

Сообщение от ksa (Сообщение 446908)
Если больше элементов с таким именем нет - сойдет и так

var doc= document.getElementsByName('hidden')[0];

Выдает при отправке 'hidden' has 'undefined'
php обработчик получает через $_POST 'undefined'
Что может быть?

Manyasha 10.03.2017 15:52

phenix79,
doc.value = opros.value;

ksa 10.03.2017 16:39

Цитата:

Сообщение от phenix79
Что может быть?

У меня все работает...
<form id="createInterview" method="POST" action="create_interview.php">
    <input type="hidden" name="hidden" value="Test!">
    <p>Ваше имя: <input type="text" name="name" /></p>
    <p><input type="submit" id="send" /></p>
</form>
<script type='text/javascript'>
var o=document.getElementsByName('hidden')[0];
alert(o.value);
</script>

Твой пример, где это не работает, я еще не видел... :no:

phenix79 10.03.2017 18:54

Спасибо, вот код файла
create_interview.php
<?php
if(isset($_POST['name']) && isset($_POST['hidden']))
$name = $_POST['name'];
$hidden = $_POST['hidden'];

    foreach($_POST as $key => $value)
        echo "POST parameter '$key' has '$value'"."<br>";


а это код файла demo.html
<!DOCTYPE html>
<html>
<head>
    <script src="jquery-3.1.1.js"></script>
    <meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />
    <style type='text/css'>
        #MyForm > label {
            display: flex;
        }
        #MyButton {
            border-color: #008a77;
            margin-left: 500px;
            width: 200px;
            height: 50px;
        }

        #MyButton2 {
            border-color: #008a77;
            margin-left: 30px;
            width: 200px;
            height: 50px;
        }

        #MyButton3 {
            border-color: #008a77;
            margin-left: 30px;
            width: 200px;
            height: 50px;
        }
        /*#SendButton {display: none;}
        #MyButton2 {display: none;}*/
    </style>
    <script type='text/javascript'>
        function myQuestion() {
            document.getElementById('SendButton').style.display = 'flex'
            document.getElementById('MyButton2').style.display = 'inline'
            var ol = document.createElement("label");
            var txt = document.createElement("textarea");
            var i=document.querySelectorAll('#MyForm textarea').length;
            ol.innerHTML='Вопрос '+(i+1);
            txt.name='Question'+i;
            ol.appendChild(txt);
            document.getElementById('MyForm').appendChild(ol);
        }

        function myAnswer() {

            var ol2 = document.createElement("label");
            var txt = document.createElement("textarea");
            var i=document.querySelectorAll('#MyForm textarea').length;
            ol2.innerHTML='Ответ '+(i+1);
            txt.name='Answer'+i;
            ol2.appendChild(txt);
            document.getElementById('MyForm').appendChild(ol2);
        }
       function Send() {
           var opros = prompt('Создайте имя опроса');
               if (opros != null) {
                  //var doc= document.getElementsByName('hidden');
                   //var doc= document.getElementsByName('hidden')[0];
                   var doc = document.querySelector("#createInterview>[name='hidden']")
                  doc.value = opros.value;
                  document.getElementById('createInterview').submite();
               } else {

                   Send();
               }
           }





    </script>
</head>
<body>
<p>Click the button to make a BUTTON element.</p>
<button onclick="myQuestion()" id="MyButton">Вопрос</button>
<button onclick="myAnswer()" id="MyButton2">Ответ</button>
<button id="MyButton3" form="createInterview" onclick="Send()">Создать опрос</button>

<form id="MyForm" action="elements.php" method="post"><button id="SendButton">Отправить</button></form>
<form id="createInterview" method="POST" action="create_interview.php">
    <input type="hidden" name="hidden" value="">
    <p>Ваше имя: <input type="text" name="name" /></p>

    <p><input type="submit" id="send" /></p>
</form>
</body>
</html>

phenix79 10.03.2017 19:12

Цитата:

Сообщение от Manyasha (Сообщение 446914)
phenix79,
doc.value = opros.value;

Спасибо большое , нужно действительно было написать просто переменную opros без value теперь все работает.
Очень помогли все!!
Спасибо всем!!!


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