#javascript #jquery
#javascript #jquery
Вопрос:
Обновлено: я хотел бы контролировать видимость нижних разделов на основе значения верхнего выбора..
то есть
selected = dogs:: only bulldog, pitbull visible
selected = fish:: GOLDFISH! visible
и т.д..
Ценю это .. Извините, я не смог лучше объяснить свой вопрос изначально —
<select>
<option value="dog">dog</option>
<option value="cat">cat</option>
<option value="fish">fish</option>
</select>
<div id="dog">bulldog</div>
<div id="cat">stray cat</div>
<div id="dog">pitbull</div>
<div id="cat">alley cat</div>
<div id="fish">GOLDFISH!</div>
Комментарии:
1. Если бы все div были в каком-то контейнере, это было бы немного проще с селекторами jQuery. Есть ли вокруг них контейнер?
2. У вас неверный HTML. Идентификаторы элементов должны быть уникальными. Они не могут быть у всех
id="petinfo"
. Но все они могут иметьclass="petinfo [dog|cat|fish]"
.3. Исправлен HTML; Все еще не могу найти способ сделать это — извинения за плохой HTML
Ответ №1:
Попробуйте это
$('#pets').change(function() {
$('#somepets div').hide();
$('#somepets div.' $(this).val()).show();
});
Но для этого вы должны изменить имена своих классов, чтобы они соответствовали значениям параметров. Также вам необходимо присвоить своему элементу «select» идентификатор.
РЕДАКТИРОВАТЬ: чтобы немного прояснить, этот селектор попытается найти элемент выбора по его идентификатору «домашние животные», поэтому вам нужно добавить id =»домашние животные». Имя и идентификатор могут иметь одно и то же значение.
РЕДАКТИРОВАТЬ: поскольку у вас возникли некоторые проблемы с HTML, вот как это должно выглядеть для работы с моим методом.
<select id="pets">
<option value="dog">dog</option>
<option value="cat">cat</option>
<option value="fish">fish</option>
</select>
<div id="somepets">
<div class="dog">bulldog</div>
<div class="cat">stray cat</div>
<div class="dog">pitbull</div>
<div class="cat">alley cat</div>
<div class="fish">GOLDFISH!</div>
</div>
Ответ №2:
<script type="text/javascript" src="jquery-1.6.2.js"></script>
<script type="text/javascript">
function selectionChanged(){
HideAll();
var selected=$('#pets option:selected').text();
var selectString='.';
selectString =selected;
$(selectString).show();
};
function HideAll(){
$('.dog').hide();
$('.cat').hide();
$('.fish').hide();
};
</script>
<select id="pets" onchange="selectionChanged()">
<option>dog</option>
<option>cat</option>
<option>fish</option>
</select>
<div id=somepets>
<div class="dog">bulldog</div>
<div class="cat">stray cat</div>
<div class="dog">pitbull</div>
<div class="cat">alley cat</div>
<div class="fish">GOLDFISH!</div>
</div>
Комментарии:
1. Событие onchange не будет запускаться для div.
2. Хороший улов, я переместил его в select, где он принадлежит 🙂
3. Ценю это, Джошуа.. Как функция может отображать только те разделы, которые соответствуют значению выбора.. Я обновил вопрос, чтобы лучше отразить то, чего я хочу достичь.. Ценю ваш ответ и потраченное время —
4. $(‘#’ $(‘# опция домашних животных: выбрано’).text).show(); это должно сделать именно это. здесь происходит то, что внутренний селектор получает текст выбранного параметра (например, dog, cat). Затем это значение добавляется к строке во внешнем селекторе, которая теперь будет выглядеть либо как $(‘#dog’), либо $ (‘#cat’). Затем он вызывает .show() для выбранных элементов. Сначала вызов HideAll() скроет ВСЕ divs, поэтому будут показаны только те, которые вы укажете show() после.
5. Событие запускается, но моя консоль воспроизводит эхо.. Ошибка: регулярное выражение слишком сложное Исходный файл: ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js Строка: 71