функция javascript не получает выпадающий текст

#javascript #html

#javascript #HTML

Вопрос:

я использую javascript для получения текста выбранного элемента из выпадающего списка. но я не получаю текст. я просматриваю выпадающий список по имени..

мой html-выпадающий список выглядит следующим образом:

 <select name="SomeName" onchange="div1();">
    <option value="someVal">A</option>
    <option value="someOtherVal">B</option>
    <option value="someThirdVal">C</option>
</select>
  

и мой javascript выглядит как:

 function div1() {     
     var select = document.getElementsByName("SomeName");     
     var result = select.options[select.selectedIndex].text;
     alert(result);
 }
  

не могли бы вы, пожалуйста, помочь мне..

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

1. почему бы вам не указать идентификатор выпадающего списка и не использовать document.getElementById ?

Ответ №1:

Вариант 1 — Если вы просто ищете значение выбранного элемента, передайте его.

 <select name="SomeName" onchange="div1(this.value);">
    <option value="someVal">A</option>
    <option value="someOtherVal">B</option>
    <option value="someThirdVal">C</option>
</select>

function div1(val)
{
    alert(val);
}
  

Вариант 2 — Вы также можете использовать идентификатор, как предложено.

 <select id="someID" name="SomeName" onchange="div1();">
    <option value="someVal">A</option>
    <option value="someOtherVal">B</option>
    <option value="someThirdVal">C</option>
</select>

function div1()
{
    var ddl = document.getElementById("someID");
    var selectedText = ddl.options[ddl.selectedIndex].value;

    alert(selectedText);
}
  

Вариант 3 — Вы также можете передать сам объект…

 <select name="SomeName" onchange="div1(this);">
    <option value="someVal">A</option>
    <option value="someOtherVal">B</option>
    <option value="someThirdVal">C</option>
</select>

function div1(obj)
{
    alert(obj.options[obj.selectedIndex].value);
}
  

Ответ №2:

getElementsByName возвращает массив элементов, поэтому вам понадобится:

 var select = document.getElementsByName("SomeName");      
var text = select[0].options[select[0].selectedIndex].text;     
alert(text);
  

Или что-то в этом роде.

Редактировать: вместо части кода «[0]» вы, вероятно, захотите либо (а) выполнить цикл по всем элементам в «select», если вы ожидаете много выборок с таким именем, либо (б) присвоить select идентификатор и использовать document.getElementById(), который возвращает только 1 элемент.

Ответ №3:

Проблема с исходным опубликованным фрагментом заключается в том, что document.getElementsByName() возвращает массив, а не отдельный элемент.

Чтобы исправить исходный фрагмент, вместо:

 document.getElementsByName("SomeName");   // returns an array
  

попробуйте:

 document.getElementsByName("SomeName")[0];  // returns first element in array
  

РЕДАКТИРОВАТЬ: Хотя это поможет вам начать работу, пожалуйста, обратите внимание на другие замечательные альтернативные ответы здесь, которые избегают getElementsByName() .

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

1. Вы не можете предположить, что первым элементом в массиве будет нужный вам select. Кроме того, getElementByName будет дороже, чем правильный getElementById. Я не думаю, что это хорошее решение.

2. по крайней мере, одна из причин, по которой код poster не работает, заключается в том, что выходные данные представляют собой массив. getElementById() лучше, да, но есть даже лучшее решение, которое позволяет избежать обоих getElementBy * .

3. Я думаю, дело в том, что ваш ответ не был ответом на его вопрос, хотя в нем была доля правды. Я согласен, что есть отличный вариант, который не использует getElementBy * , вот почему я включил два примера этого в свой ответ.