Reputation: 23
I'm stuck on something that I think should be easy... I've got a select that on change gets the id value and im tring to hide all and show th ones that with the same id value so it works just with the first any help me please
<select name="" id="estado_list">
<option value="0">-</option>
<option value="1">Nuevo León</option>
<option value="2">Puebla</option>
</select>
<ul style="list-style: none outside none;">
<li class="forli" id="1">data</li>
<li class="forli" id="1">data</li>
<li class="forli" id="1">data</li>
<li class="forli" id="1">data</li>
<li class="forli" id="1">data</li>
<li class="forli" id="1">data</li>
<li class="forli" id="2">data</li>
</ul>
$(document).ready(function(){
$("#estado_list").change(function(){
var id = $(this).val();
if (id == 0 ){$('.forli').show();}
else{$('.forli').hide();
$('li').each(function(){
$('#'+ id).show();
});
}
});
});
Upvotes: 2
Views: 1218
Reputation: 268344
You should modify your markup so as to not use numbers for id
values, as well as not use the same id
over and over. I would encourage you to make further use of class values:
<select id="estado_list">
<option value="zero">-</option>
<option value="one">Nuevo León</option>
<option value="two">Puebla</option>
</select>
<ul>
<li class="forli one">1</li>
<li class="forli one">2</li>
<li class="forli one">3</li>
<li class="forli one">4</li>
<li class="forli one">5</li>
<li class="forli one">6</li>
<li class="forli two">7</li>
</ul>
Once you've done this, you can filter the the results when your select changes:
$("#estado_list").on("change", function(e){
$("li.forli").each(function(){
$(this).toggle( $(this).hasClass( e.target.value ) );
});
});
Demo: http://jsfiddle.net/JtFvK/1/
Upvotes: 1
Reputation: 1000
Id fields should be unique and will cause problems when accessed from the DOM object. Try using the class field instead.
<select name="" id="estado_list">
<option value="list0">-</option>
<option value="list1">Nuevo León</option>
<option value="list2">Puebla</option>
</select>
<ul style="list-style: none outside none;">
<li class="forli list1">data</li>
<li class="forli list1">data</li>
<li class="forli list1">data</li>
<li class="forli list1">data</li>
<li class="forli list1">data</li>
<li class="forli list1">data</li>
<li class="forli list2">data</li>
</ul>
$(document).ready(function(){
$("#estado_list").change(function(){
$('.forli').hide().filter("."+$(this).val()).show();
});
});
Upvotes: 0