Выбор данных из массива и отображение данных из другого массива в абзаце — javascript

#javascript #html #arrays #select #onchange

Вопрос:

Как выбрать свойство в select и отобразить текст массива text[0] и так далее, мне нужно было добавить эту функцию в этот код, не изменяя ее.

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

 <!DOCTYPE html>
<html>
<script>

var property = new Array();

property[0] = "Acceleration";
property[1] = "Area";
property[2] = "Lenght";
property[3] = "Weigth";

var text = new Array();

text[0] = "Aceleration is the first value of converter";
text[1] = "Area is the second value of converter";
text[2] = "Aceleration is the first value of converter";
text[3] = "Area is the second value of converter";

function FillMenuWithArray(myMenu, myArray) {
  var i;
  myMenu.length = myArray.length;
   for (i = 0; i < myArray.length; i  ) {
    myMenu.options[i].text = myArray[i];
  }
}


window.onload = function(e) {
  FillMenuWithArray(document.property_form.the_menu, property)
}

</script>
<body>


<h2>What Can JavaScript Do?</h2>

 <form name="property_form">
    <span>
      <select class="select-property" name="the_menu">
      </select>
    </span>
  </form>
  <br>
  <br>
 <p id="text">Text</p>

 </body>
 </html>
 

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

1. Итак, вы пытаетесь показать выбранный автомобиль в абзаце? Что UpdateUnitMenu происходит? поделитесь кодом.

2. игнорирует этот фрагмент, это потому, что этот код преобразователя единиц, UpdateUnitMenu обновляет два ввода со значениями для преобразования

3. я прав, вы хотите показать выбранную машину в абзаце

4. Да, когда я выбираю автомобиль, появляется текст в <span>или <p>. или также как отобразить ссылку на встроенную страницу в html

5. Проверьте решение. Я это то, что тебе нужно?

Ответ №1:

В вашем коде возникло несколько проблем, поэтому я счел лучшим написать свою собственную связанную версию, на которую вы можете ссылаться. Вы можете запустить фрагмент кода здесь, чтобы убедиться, что это то, что вы ищете.

 var cars = {
  Saab: "This is a Saab.",
  Fiat: "I love Fiat.",
  BMW: "Some people call BMW's a beamer."
}

var select = document.querySelector(".select-car");
var p = document.querySelector("p#demo");

Object.keys(cars).forEach(car => {
  const option = document.createElement("option");
  option.value = car;
  option.append(car);
  select.append(option);
})

select.onchange = function () {
  p.innerText = cars[select.options[select.selectedIndex].value] || "";
}; 
 <h2>JavaScript Arrays</h2>

<form name="property_form">
  <span>
    <select class="select-car" name="the_menu">
      <option value="">Choose Car</option>
    </select>
  </span>
</form>

<p id="demo"></p> 

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

1. это верно, но мне нужно отобразить не текст самого массива, а текст о нем. Например, у вас массив автомобилей saab, я хочу отобразить текст об автомобиле

2. Я обновил ответ, чтобы показать вам, как вместо этого показывать описание для каждого автомобиля.

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

Ответ №2:

 const p = document.querySelector("#demo");

var cars = new Array();
cars.push("Saab", "Fiat", "BMW");

var text = new Array();
text[0] = "Saab 9-3 Viggen was the jet on wheels of the Swedish brand";
text[1] = "Fiat9 Viggen  brand";

function FillMenuWithArray(myMenu, myArray) {
  // Fills the options of myMenu with the elements of myArray.
  myMenu.innerHTML  = myArray.map(c => `<option value='${c}'>${c}</option>`).join('');
}


window.onload = function(e) {
  FillMenuWithArray(document.property_form.the_menu, cars);
  
  // when changed on select change in paragraph
  document.property_form.the_menu.addEventListener('change', function(e){
    const ptext = text[e.target.selectedIndex-1] ?? '';
    p.innerHTML = `<span>${ptext}</span>`;
  });
} 
 <form name="property_form">
  <select class="select-car" name="the_menu">
    <option value="">Select car</option>
  </select>

  <p id="demo"></p>

</form> 

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

1. Я буду использовать твой код в качестве ссылки, братан, действительно спасибо за помощь

2. Хорошо, проверьте обновленный ответ, чтобы он соответствовал потоку ваших функций.

3. братан, большое тебе спасибо

Ответ №3:

В конце концов мне удалось объединить два решения (спасибо за вклад), чтобы достичь этого результата, при выборе опции появляется соответствующий текст, и он был более похож на предыдущий код

 <!DOCTYPE html>
<html>
 <body>

 <h2>What Can JavaScript Do?</h2>


 <form name="property_form">
  <select class="select-car" name="the_menu">
    <option value="">Select car</option>
  </select>
  <p id="demo"></p>
</form>

<script>

const p = document.querySelector("#demo");

 var cars = new Array();
 var text = new Array();

 cars[0] = "Saab";
 text[0] = new Array("<option value='/acceleration'></option>");

 cars[1] = "fiat";
 text[1] = "Fiat9 Viggen  brand";

 cars[2] = "bmw"
 text[2] = "Some people call bmw a beamer";


function AbrirSecao(secao){
                window.open("" secao "", "_parent");
        }

function AbrirSecao(secao) {
      let display = document.getElementById('#text')

  fetch(secao).then(function(response) {
    // The API call was successful!
    return response.text();
  }).then(function(html) {
    // This is the HTML from our response as a text string
    var parser = new DOMParser();
    var doc = parser.parseFromString(html, 'text/html');
    const element = doc.querySelector('body > *');
    display.appendChild(element);
  }).catch(function(err) {
    // There was an error
    console.warn('Something went wrong.', err);
  });
}

function FillMenuWithArray(myMenu, myArray) {
   // Fills the options of myMenu with the elements of myArray.
  myMenu.innerHTML  = myArray.map(c => `<option value='${c}'>${c} 
   </option>`).join('');
}

 window.onload = function(e) {
  FillMenuWithArray(document.property_form.the_menu, cars);
  // when changed on select change in paragraph
  document.property_form.the_menu.addEventListener('change', function(e) 

{
    const ptext = text[e.target.selectedIndex-1] ?? '';
    p.innerHTML = `<span>${ptext}</span>`;
  });
}
 </script>
 </body>
</html>