Привет всем, мне нужна помощь в создании выпадающего меню, которое реагирует на классы, содержащиеся в наборе параметров. Я хочу, чтобы пользователи выбирали брошюры (я назову меню брошюр ) и на основе классов, содержащихся в этих параметрах, второе раскрывающееся меню заполняется на основе классов в первом.Динамические выпадающие меню с использованием jQuery для веб-сайта
Например выбора этой опции:
<option id="parRight" class="eng kor esp">Special Ed. Parents Rights</option>
создать бы второй выпадающий я называю выбор по языка выпадающего меню на основе классов выше в «английский» «Кореец» и «Испанский» соответственно и только те языки, которые представлены в классах этого конкретного варианта.
До сих пор я смог правильно заполнить список только с первой попытки. Моя проблема в том, что когда я перехожу и выбираю другую брошюру из первого меню, мой метод .append
просто добавляет в раскрывающееся меню выбора языка.
Вот соответствующий код:
HTML
<select id="docs">
<option>- Choose a document to preview -</option>
<option id="specEd" class="eng kor viet esp chin">Special Education Programs</option>
<option id="parRight" class="eng kor esp">Special Ed. Parents Rights</option>
<option id="cac" class="eng esp">CAC Brochure</option>
</select>
<div id="langs">
<ul style="display:none;">
<li>-Select a Language-</li>
<li class="eng">English</li>
<li class="esp">Español</li>
<li class="kor">한국어</li>
<li class="viet">Tiếng Việt</li>
<li class="chin">中文</li>
</ul>
</div>
JQuery
var $select = $("<select></select>");
$("#langs").append($select);
function englishTest(lang) {
return lang.hasClass("eng");
}
function spanishTest(lang) {
return lang.hasClass("esp");
}
function koreanTest(lang) {
return lang.hasClass("kor");
}
function chineseTest(lang) {
return lang.hasClass("chin");
}
function vietnameseTest(lang) {
return lang.hasClass("viet");
}
$("#docs").change(function(){
console.log("test");
var $selection = $("#docs option:selected");
if (englishTest($selection) === true) {
console.log("english passing");
$select.append("<option>English</option>");
}
if (spanishTest($selection) === true) {
console.log("spanish passing");
$select.append("<option>Español</option>")
}
if (koreanTest($selection) === true) {
console.log("korean passing");
$select.append("<option>한국어</option>")
}
if (chineseTest($selection) === true) {
console.log("chinese passing");
$select.append("<option>中文</option>")
}
if (vietnameseTest($selection) === true) {
console.log("vietnamese passing");
$select.append("<option>Tiếng Việt</option>")
}
});
Я знаю, что этот код повторяется, и я не поклонник этого. Я также ценю некоторые указания о том, как очистить этот код и сделать его таким, чтобы я придерживался DRY. Не повторяйте себя. Заранее спасибо.
Это именно то, что я пытаюсь сделать. Большое спасибо. У меня есть несколько вопросов. в отношении 'var selected = $ (" option: selected ", this) .attr (" class ");' Это говорит, что переменная '$ selected' равна выбранной опции? Я не знаю, к чему это относится. Это выбранный вариант? Затем вы получаете атрибут класса с '.attr (« class »)? – m00saca
Действительно, если бы вы могли просто пропустить меня через него. Мне нужна помощь, которая точно знает, что происходит по строкам. Я новичок в этом. – m00saca
Да. 'selected' установлен на выбранный вариант раскрывающегося списка' # docs'. Выпадающий контекст (это). Я также получаю классы выбранных, выполняя '.attr()'. Это дает вам список классов. Вы можете предоставить объект контекста в качестве второго параметра селектора jquery, как описано в этой статье: http://weblogs.asp.net/dwahlin/jquery-tip-1-defining-a-context-when-using-selectors. КСТАТИ. Это также будет работать: 'var selected = $ (this) .find ('option: selected'). Attr (" class ");'. –