#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 * , вот почему я включил два примера этого в свой ответ.