как присвоить значение выпадающего списка из переменной

#javascript #function

#javascript #функция

Вопрос:

когда пользователь отвечает на QuestionA (выпадающий список) и questionA1 (список флажков), мне нужна информация, которую они ввели, которая автоматически отображается в разделе questionB (выпадающий список) и questionB1 (список флажков)

Я пытаюсь использовать функцию javascript для этого.

пока у меня есть

 var e = document.getElementById("questionA");
var AnswerA = e.options[e.selectedIndex].text;
  

Я знаю, что это присвоит выбор из QuestionA переменной answerA, но я не знаю, как присвоить это выпадающему списку questionB. Я также не знаю, как получить выборки из списка флажков (может быть несколько выборок) для заполнения второго списка флажков.

Буду признателен за любую помощь.

Комментарии:

1. Добро пожаловать в StackOverflow. Вы можете отформатировать свой код, чтобы он был немного более читабельным, сделав отступ в каждой строке на 4 пробела (я пошел дальше и внес правку за вас)

2. Пожалуйста, покажите html-предпочтительный до и после

Ответ №1:

Вам нужно было бы привязаться к методу onchange из выпадающего списка A. Таким образом, всякий раз, когда это изменяется (т. Е. Если что-то выбрано), вы можете получить значение этого выбора и поместить его в выпадающий список B, выполнив что-то вроде :

 var option = document.createElement('option');
option.value = AnswerA; 
option.innerHTML = AnswerA;
document.getElementById('questionB').appendChild(option);
  

Делегирование событий обычно немного сбивает с толку начинающих разработчиков javascript, потому что это нужно делать немного по-разному для каждого браузера. Я бы посоветовал погуглить cross browser event delegation или пока использовать какую-нибудь библиотеку JavaScript, которая поможет вам быстрее начать работу. Затем, когда ваш проект будет завершен, посмотрите, как работает делегирование событий в разных браузерах.

Комментарии:

1. Я могу включить его в раздел отправки функции, поэтому ему не обязательно быть функцией onchange. Используется только в том случае, если при сохранении записи для нее ничего не было выбрано. Приведенный выше раздел сохранен для QuestionA, но не передается в questionB. Я потратил последние два дня на написание функций JavaScript, поэтому простите меня, если я не придаю особого значения.

Ответ №2:

итак, это то, что я получил из вашего вопроса

вы хотите, чтобы ответы, заданные в первых вопросах, стали по умолчанию для вторых вопросов?

итак, это ваш пример, я сам не использую необработанный dom, поэтому этот момент не может быть полностью независимым от браузера

     <html>
      <head>
        <script type="text/javascript" charset="utf-8">

          var setup = function() {
            var questionA = document.getElementById("question-a");
            var checkboxesA = document.getElementById("checkboxes-a");
            var questionB = document.getElementById("question-b");
            var checkboxesB = document.getElementById("checkboxes-b");

            questionA.onchange = function() {
              questionB.selectedIndex = questionA.selectedIndex;
            };

            checkboxesA.onchange = function(e) {
              var checkbox = e.srcElement;
              var ele = document.getElementById(checkbox.getAttribute("data-question-id"));
              ele.checked = checkbox.checked;
            };
          };

        </script>
      </head>
      <body onload="setup()">


        <div>

          <div class="first-questions">
            <h2> first question </h2>
            <select id="question-a">
              <option value="0">first</option>
              <option value="0">second</option>
              <option value="0">third</option>
            </select>

            <div id="checkboxes-a">
              <input type="checkbox" data-question-id="something-first" value="first">first</input>
              <input type="checkbox" data-question-id="something-second" value="second">second</input>
              <input type="checkbox" data-question-id="something-third" value="third">third</input>
            </div>
          </div>

          <div class="second-questions">
            <h2> second question </h2>

            <select id="question-b">
              <option value="0">first</option>
              <option value="0">second</option>
              <option value="0">third</option>
            </select>

            <div id="checkboxes-b">
              <input type="checkbox" name="question-b-first" 
                     id="something-first" value="first">first</input>
              <input type="checkbox" name="question-b-second" 
                     id="something-second" value="second">second</input>
              <input type="checkbox" name="question-b-third" 
                     id="something-third" value="third">third</input>
            </div>
          </div>


        </div>

      </body>
    </html>
  

идея в том, что флажки, о которых идет речь, a имеют идентификатор вопросов, о которых идет речь b
но вы также можете найти их из соглашения или добавить события вручную к каждому флажку: D

но если вы собираетесь делать что-то вроде dom, я бы рекомендовал использовать фреймворк javascript (jquery), также проще получить хорошую документацию …. в Интернете полно ужасных необработанных материалов javascript.

Редактировать —

хорошо, причина, по которой это не работает, вероятно, заключается в этой строке var checkbox = e.srcElement;

это может отличаться в разных браузерах, измените его на это

if(например,srcElement) { var checkbox = e.srcElement; } if(например,originalTarget) { var checkbox = e.originalTarget; }

и это работает для firefox, но я не знаю, что в ie этого нет, но это хорошая причина использовать такой фреймворк, какhttp://wwww.jquery.com для различных браузеров

простой способ

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

Комментарии:

1. боюсь, это не работает. также мне нужно добавить его в функцию отправки — если пользователь не ввел выделение для questionB, то оно автоматически заполняется выделением для QuestionA

Ответ №3:

 var e = document.all("QuestionA").options.selectedIndex;
document.all("QuestionB").options.selectedIndex = e;


var ckBox1 = document.getElementById("checkboxA")
var ckBox2 = document.getElementById("checkboxB")
if (ckBox1.checked == true) 
   {
     ckBox2.checked = true;
   }
  

На всякий случай, если кто-нибудь еще ищет это. Это код, с которым я начал работать. Спасибо за вашу помощь.