#jquery #function #this #onchange #function-parameter
#jquery #функция #это #onchange #функция-параметр
Вопрос:
У меня есть код, приведенный ниже:
function showHideOptions() {
$("#template1, #template2, #template3, #template4").css("display","none");
$(this).css("display","block");
}
И у меня есть четыре выпадающих списка выбора, в определенный момент я хочу выбрать только один из вариантов выбора шаблона.
<select id="masterdropdown">
<option>T1</option>
<option>T2</option>
<option>T3</option>
<option>T4</option>
</select>
<select id="template1" onchange="return showHideOptions();">
<option>Template1</option>
<option>Template2</option>
<option>Template3</option>
<option>Template4</option>
</select>
<select id="template2" onchange="return showHideOptions();">
<option>Template1</option>
<option>Template2</option>
<option>Template3</option>
<option>Template4</option>
</select>
<select id="template3" onchange="return showHideOptions();">
<option>Template1</option>
<option>Template2</option>
<option>Template3</option>
<option>Template4</option>
</select>
<select id="template4" onchange="return showHideOptions();">
<option>Template1</option>
<option>Template2</option>
<option>Template3</option>
<option>Template4</option>
</select>
CSS:
#template1, #template2, #template3, #template4{display:none;}
В принципе, у меня есть выпадающий список top (masterdropdown), который всегда виден, это также селектор шаблонов, при выборе его параметров я хочу показать конкретный шаблон drodown, который соответствует этому выбранному параметру в masterdropdown. Как этого можно достичь в jquery. $(this)
не работает в этом случае, будучи вызванным из функции.
Комментарии:
1.
hide()
иshow()
являются вашими друзьями.
Ответ №1:
Смотрите рабочую демонстрацию http://jsfiddle.net/X5mWL /
JS
$(function(){
$("#masterdropdown").change(function() {
$("#template1, #template2, #template3, #template4").hide();
$($("#masterdropdown").val()).show();
});
});
HTML
<select id="masterdropdown">
<option value="#template1">T1</option>
<option value="#template2">T2</option>
<option value="#template3">T3</option>
<option value="#template4">T4</option>
</select>
<select id="template1">
<option>Template1</option>
<option>Template2</option>
<option>Template3</option>
<option>Template4</option>
</select>
<select id="template2">
<option>Template1</option>
<option>Template2</option>
<option>Template3</option>
<option>Template4</option>
</select>
<select id="template3">
<option>Template1</option>
<option>Template2</option>
<option>Template3</option>
<option>Template4</option>
</select>
<select id="template4">
<option>Template1</option>
<option>Template2</option>
<option>Template3</option>
<option>Template4</option>
</select>
Комментарии:
1. почему вы используете nowrap (body) для jquery., Как это меняется по сравнению с Dom Ready
2. Это было для того, чтобы заставить вашу предыдущую функцию работать, она больше не нужна, если вы используете мой метод.
3. кстати, чем это отличается от onDomReady и в чем разница в использовании $(«document»).ready(функция() { //материал здесь }) Могу ли я использовать $ (функция () {}) только один раз на моей странице И $(функция () { //материал здесь })
4.
$("document").ready(function() { //stuff here })
и$(function() { //stuff here })
одинаковы, вы можете использовать их несколько раз, и jQuery объединяет их.onDomReady
это jsfiddle, который такой же, как$(document).ready()
.nowrap(body)
просто выводит JS в теле.5. Но я не могу дать своим параметрам значения, подобные идентификаторам последующих выпадающих списков, возможно ли обойти эту проблему
Ответ №2:
<script>
$(document).ready(function() {
$('#masterdropdown').showHideOptions().change();
});
$.fn.showHideOptions = function() {
this.change(function() {
$(".templateDropdowns").hide();
$('#' $(this).val()).show();
});
return this;
};
</script>
<select id="masterdropdown">
<option value="template1">template1</option>
<option value="template2">template2</option>
<option value="template3">template3</option>
</select>
<select id="template1" class="templateDropdowns">
<option>ta</option>
<option>tat</option>
</select>
<select id="template2" class="templateDropdowns">
<option>ete</option>
<option>eTee</option>
</select>
<select id="template3" class="templateDropdowns">
<option>Te</option>
<option>Tet</option>
</select>
Ответ №3:
Прикрепите обработчик события изменения к вашему главному раскрывающемуся списку.
В нем просто отметьте значение select и покажите / скройте соответствующие выпадающие списки.
Что-то вроде этого (немного устаревшее в javascript)
$(«masterdropdown»).change(функция() {
$("#template1, #template2, #template3, #template4").hide(); var selText = $(this).search("option:selected").text(); if(selText == 'T1') $("#template1").show(); if(selText == 'T2') $("#template2").show(); if(selText == 'T3') $("#template3").show(); if(selText == 'T4') $("#template4").show();
});