Выпадающий список+текстовое поле
Доброго времени суток!
Только начал работать с JavaScript'ом и у меня возникли некоторые вопросы. А вопрос такой: У меня есть список вида
<select id="select">
<option>Первый вариант
<option>Второй вариант
</select>
<input type="text">
Хотелось бы сделать, чтобы при выборе элемента "Второй вариант" появлялось текстовое поле, а при выборе элемента "Первый вариант" это поле не появлялось. Если где-то уже рассматривался этот вопрос - не ругайтесь, плиз, а киньте ссылку на тему. |
назначаешь обработчик события change select'а:
document.getElementById('select').onchange = function() {
...
}
а в нем в зависимости от выбранного пункта (this.selectedIndex или this.value) изменяешь свойство display textbox'а (textbox.style.display = 'none' или textbox.style.display = 'inline') кроме того, можешь почитать статьи (например, про события, DOM), книги |
А не трудно будет привести пример в полном виде? Просто мне проще разобраться в работе скрипта, имея перед глазами полный вариант.
P.S. Статьи почитал, спасибо. А книгу я и так читаю, только нужный мне момент не очень освещен. |
примерно так. смешан работающий код и написанный только что для этого примера.
function MYFUNCT(obj)
{
if (obj.value=="ZZZ") {
statExportDateStart_input = document.getElementById("statExportDateStart_input");
statExportDateStart_input.style.visibility = "visible";
statExportDateStart_input.style.display = "block";
}
}
... <tr>
<td><p>Кто:</td>
<td><select name="stat_target" class="formStatExport_select" onchange="MYFUNCT(this);">
<option value="non_selected" selected="selected">Выберите объект</option>
<option value="ААА">ААА</option>
...
<option value="ZZZ">ZZZ</option>
</select></td>
</tr>
...
<input style="visibility: hidden; display: none;" class="formStatExport_input" type="text" id="statExportDateStart_input">
|
Спасибо за ответ! Но мне кажется, что так будет короче и намного проще:
<script>
function f1()
{
var s = document.getElementById("select");
var t = document.getElementById("a1");
if(s.selectedIndex)
t.style.display = 'inline';
else
t.style.display = 'none';
}
</script>
<select id="select" onchange = f1()>
<option>Первый вариант</option>
<option>Второй вариант</option>
</select>
<input type="text" style="display:none" id="a1">
|
Цитата:
"Хотелось бы сделать, чтобы при выборе элемента "Второй вариант" появлялось текстовое поле, а при выборе элемента "Первый вариант" это поле не появлялось." 1. вы просили пример. вы его получили. 2. "краткость и простота" - весьма спорный вопрос. 2.1. краткость. если я уберу лишний код, сделаю короче имена переменных и ID, уберу св-во visibility, то код по "краткости" будет аналогичным. 2.2 простота. а чем он проще? в данном случае привязка к тому, что нужный вам элемент второй по счету, св-во selectedIndex будет ==1, что ==true, и ваше условие выполнится. а если у вас список с 10ю элементами? вы будете каждый помнить по индексу? ок. вы запоминаете и сравниваете их по индексу. а что, если вам нужно будет переставить несколько элементов, или добавить что-либо в начало списка? "О, Боже",- скажете вы.. - "весь порядок сбился..." и будет необходимо вспомнить, а в каком месте, в каком условии, какой selectedIndex соответствует какому элементу списка.. 3. у меня просьба. а поясните, для каких целей вот эта запись?
var s = document.getElementById("select");
я нисколько не претендую на правильность, но в приведенном в примере коде, в вызов функции параметром передается объект this. для чего, спросите вы? а вот ответ на этот вопрос останется автору темы домашним заданием. |
Насчет десятка вариантов - вы правы, действительно будет сложно разобраться. просто для начинающего мне действительно проще написать указанный мною скрипт. :)
Цитата:
Цитата:
Если неверно - поправьте пожалуйста. :) |
AzriMan, я тоже считаю, что название переменной (как для локальной переменной функции) очень уж длинное и непонятно зачем одновременно используется и visibility и display.
Хотя согласен, что проверять какой пункт выбран лучше по value. Кроме того, alpotemkin, наверняка не знает, что когда ничего не выбрано selectedIndex == -1 (http://www.w3.org/TR/1998/REC-DOM-Le...ml#ID-85676760) с другой стороны, alpotemkin, проверка if(s.selectedIndex) очень слабо объясняет происходящее имхо. Лучше уж if(s.selectedIndex == 1) Цитата:
document.getElementById('select').onchange = function() {
...
}
т.е. с помощью javascript, а не средствами html, то this опять же указывает на select Я так понимаю, что "this" - это ключевое слово элемента HTML, которое в данный момент обрабатывает событие...Т.е., прописав функцию doSomething, можно значительно сократить и упростить код скрипта. нет, this - ключевое слово javascript |
Ага, примерно все понял... Постараюсь запомнить. :) Всем спасибо за объяснения. :)
|
Цитата:
а назначать осмысленные имена локальным (и не только) переменным.. наверно моя привычка.. что бы, если будет необходимость, вернуться к написанному мною коду через месяц/два я мог вспомнить, а что означает вот этот `var a;` и вот этот `var xxx;` для минимизации кода всегда можно воспользоваться различными минификаторами/обфускаторами.. Цитата:
Цитата:
|
| Часовой пояс GMT +3, время: 22:58. |