我的jquery代码有问题。我想使用jquery进行级联下拉列表。下面是我的代码。
HTML
<SELECT class="input_style" name="comp_dd" id="comp_dd">
<option value="0">[Select]</option>
<OPTION value="1">Company1</OPTION>
<OPTION value="2">Company2</OPTION>
<OPTION value="3">Company3</OPTION>
<OPTION value="4">Company4</OPTION>
</SELECT>
<SELECT class="input_style" name="group_dd" id="group_dd">
<option data-parent="-1" value="0">[Select]</option>
<OPTION data-parent="1,3"; value="1" >grp_f</OPTION>
<OPTION data-parent="1,2"; value="2" >grp_e</OPTION>
<OPTION data-parent="1,3,4"; value="3" >grp_t</OPTION>
</SELECT>
jquery代码
$().ready(function() {
$('#comp_dd').change(function() {
var parent = $(this).val();
if(parent!=0)
{
$('#group_dd').children().each(function() {
var listOfNumbers = $(this).data('parent');
if($(this).data('parent')!='-1')
{
var numbers = listOfNumbers.split(',');
if(jQuery.inArray(parent, numbers)!=-1 )
{
$(this).show();
}
else
{
$(this).hide();
}
}
});
}
else
{
$('#group_dd').children().each(function() {
$(this).show();
});
}
});
});
代码正常运行到chrome and FF
但无法在IE7
&amp; IE8
。 .hide()
无法使用IE7 and IE8
请帮我摆脱它。
提前致谢
答案:(由Paulo Rodrigues提供)
js code:
var original = $('#group_dd').clone();
$('#comp_dd').change(function() {
var parent = $(this).val();
$('#group_dd').empty().append($(original).html());
if (parent != 0) {
$('#group_dd').children().each(function() {
var listOfNumbers = $(this).data('parent');
if ($(this).data('parent')!='-1') {
var numbers = listOfNumbers.split(',');
if (jQuery.inArray(parent, numbers)==-1 ) {
$(this).remove();
}
}
});
}
});
答案 0 :(得分:6)
.hide()会将样式显示更改为none,IE不允许这样做。所以我建议你删除这个元素。
答案 1 :(得分:1)
在jquery中使用.detach()。
$('#comp_dd').change(function() {
var parent = $(this).val();
if (parent != 0) {
$('#group_dd').children().each(function() {
var listOfNumbers = $(this).data('parent');
if ($(this).data('parent') != '-1') {
var numbers = listOfNumbers.split(',');
if (jQuery.inArray(parent, numbers) != -1) {
$(this).show();
}
else {
alert($(this).val()+" detached");
$(this).detach();
}
}
});
}
else {
$('#group_dd').children().each(function() {
$(this).show();
});
}
});
答案 2 :(得分:0)
你可以做$(this).css('display','none'); ?
答案 3 :(得分:0)
分离的方式是一种更复杂的方式...... 如果您克隆选项(所有选项),然后根据文档就绪中的onchange的值将选项附加到选择,而不是删除()您不希望与该初始选择相关的选项 - 在我的情况下它是国家到州,但为了你的例子下拉一个选择确定下拉值两个值...
var cloneone = $('#IDVALUE option').clone();
var dropdown1_value = $('#dropdown1').val();
$('#dropdown1').change(function(){
if(dropdown1 == 'value you want here')
{
cloneone.appendTo('#dropdown2');
$('#dropdown2 option.OPTIONS_WITH_CLASS_YOU_WANT_TO_NOT_SHOW').remove();
}
});
基本上有,否则,如果您正在寻找的每个值... 还有其他的方法,但这似乎是最简单的,你可以用更直观的方式做到这一点,所以你不必指定其他,但为了我的目的,我不需要挖那么深,这是美国,加拿大或其他......
答案 4 :(得分:0)
@pkachhia - &gt;我找到了解决方案,在IE8.Plz中工作正常。让我知道它对你有用。谢谢。
jsfiddle.net/NehaBajoria/22pW4 /