Как изменить свойство отображения CSS из JavaScript?
Я пытаюсь изменить свойство CSS отображения тега <div>
, когда пользователь меняет значение <select>
.
Вот мой код HTML:
<select type="text" name="category" onblur="display_hidden_fields();">
<option><!-- Content --></option>
<option><!-- Content --></option>
</select>
<div id="hidden" style="display:none;">
<label for="test">Label</font></label>
<select type="text" name="test">
<option value="1">Default</option>
<option value="2">Value1</option>
<option value="3">Value2</option>
</select>
</div>
(обратите внимание, что упрощенная версия моего кода. На самом деле, каждый <label>
и <select>
находится в <td>
. Думаю, это не имеет значения)
Теперь мой JS-код:
function display_hidden_fields()
{
alert("JS Function");
document.getElementById("hidden").style.display = "block";
}
Что ж. Когда я выбираю новый <option>
в первой <select>
с именем "category", я получаю предупреждение "Функция JS". Итак, моя функция display_hidden_fields()
выполнена правильно.
Но вторая строка этой функции... ничего! Мой <div>
с именем "hidden" не отображается: (
Мне кажется, что в моем коде нет ничего плохого. Более того, я пробовал много вариантов.
- Как указание style="display:block"
в свойствах <div>
и изменение его на "none" в JS.
- Или пытаться использовать другие свойства, такие как "inline", "inline-block",...
- Или используя "видимость" вместо "display"
- Или не указывать какое-либо свойство вообще в HTML.
Кто-нибудь может мне помочь?:)
Спасибо.
[EDIT] Важное замечание
Я думаю, что нашел что-то интересное. Кажется, что <div>
с display:none;
, смешанным с <tr>
и <td>
, полностью нефункционально. Вот мой реальный код:
<tr>
<div id="hidden" style="display:none;">
<td class="depot_table_left">
<label for="sexe">Sexe</label>
</td>
<td>
<select type="text" name="sexe">
<option value="1">Sexe</option>
<option value="2">Joueur</option>
<option value="3">Joueuse</option>
</select>
</td>
</div>
</tr>
Содержимое <div>
все еще отображается. И я могу попытаться каким-либо образом изменить его в JS, это не сработает.
Я также попытался удалить теги <table>
, <tr>
и <td>
, и он отлично работает. Но мне нужна эта таблица...
Ответы
Ответ 1
Это должно быть
document.getElementById("hidden").style.display = "block";
не
document.getElementById["hidden"].style.display = "block";
ИЗМЕНИТЬ из-за авторского редактирования:
Почему вы используете <div>
здесь? Просто добавьте идентификатор в элемент таблицы и добавьте к нему скрытый стиль. Например. <td id="hidden" style="display:none" class="depot_table_left">
Ответ 2
Я нашел решение.
Как сказано в EDIT моего ответа, <div>
не работает в <table>
.
Поэтому я написал этот код:
<tr id="hidden" style="display:none;">
<td class="depot_table_left">
<label for="sexe">Sexe</label>
</td>
<td>
<select type="text" name="sexe">
<option value="1">Sexe</option>
<option value="2">Joueur</option>
<option value="3">Joueuse</option>
</select>
</td>
</tr>
И это прекрасно работает.
Спасибо всем;)