Я хотел бы знать, как показывать скрытый div в зависимости от выбранного параметра, причем div из предварительно выбранного варианта уже показан.
<select name="fruits" id="fruits">
<option value="apple" data-fruit-name="apple" selected="selected">Apple</option>
<option value="mango" data-fruit-name="mango">Mango</option>
</select>
<div class="message" data-fruit-name="apple">I'm Apple.</div>
<div class="message" data-fruit-name="mango">I'm Mango.</div>
Сообщение, если оно не выбрано, должно быть скрыто. Но поскольку Apple предварительно выбран, я бы хотел, чтобы ее сообщение также было задумано. Когда пользователь выбирает Mango, сообщение Apple должно быть скрыто, сообщение Mango должно отображаться и наоборот.
Ты можешь сделать:
$('#fruits').change(function() {
var fruitName = $(this).find('option:selected').data('fruit-name');
$('.message[data-fruit-name="' + fruitName + '"]').show().siblings('.message').hide();
}).change();
Попробуйте этот код.
$('#fruits').change(function (){
$('.message').hide();
var fruit = $(this).find('option:selected').data('fruit-name');
$('.message[data-fruit-name="' + fruit + '"]').show();
});
Но было бы лучше реорганизовать элементы сообщения, которые нужно идентифицировать, например:
<div class="message" id="apple">I'm Apple.</div>
<div class="message" id="mango">I'm Mango.</div>
а затем измените код на это:
$('#fruits').change(function (){
$('.message').hide();
var fruit = $(this).find('option:selected').data('fruit-name');
$('#' + fruit).show();
});
$(function(){
$('#fruits').change(function(){
var display = $(this).val();
$('.message[data-fruit-name='+display+']').show().siblings('.message').hide();
});
});
<select name="fruits" id="fruits">
<option value="apple" data-fruit-name="apple" selected="selected">Apple</option>
<option value="mango" data-fruit-name="mango">Mango</option>
</select>
<div class="message" data-fruit-name="apple" style='display:none;'>I'm Apple.</div>
<div class="message" data-fruit-name="mango" style='display:none;'>I'm Mango.</div>
$(".message").hide();
$("#fruits").change(function() {
var _this = $(this);
$(".message").each(function() {
if(_this.find("option:selected").data("fruit-name") == $(this).data("fruit-name")) {
$(".message").hide();
$(this).show();
}
});
}).change();
Вы можете использовать val(), чтобы выбрать правильный div, показать его и использовать.siblings, чтобы скрыть другие:
$(function(){
//Hide initially
$("#"+$("select").val()).siblings("div").hide();
$("select").change(function(){
//Hide/show onChange
$("#"+$("select").val()).show().siblings("div").hide();
});
});
<select>
<option value="a" selected>a</option>
<option value="b">b</option>
<option value="c">c</option>
</select>
<div id="a">A</div>
<div id="b">B</div>
<div id="c">C</div>