2

我有一张桌子,里面有两个下拉菜单。从第一个下拉列表中选择一个值时,将显示第二个下拉列表的值。

为此,我编写了以下函数,该函数在onchange第一个下拉列表的事件中被调用:

function dataTypeChanged(selectedValue){

document.getElementById("nodeInputValidation").innerHTML = "";
var rows = $('table.intValidationTable tr');
rows.filter('.rangeTR').css("visibility", "collapse");
rows.filter('.listTR').css("visibility", "collapse");
rows.filter('.textListTR').css("visibility", "collapse");
rows.filter('.dateRangeTR').css("visibility", "collapse");
rows.filter('.dateListTR').css("visibility", "collapse");

var validationTypes = document.getElementById("validationType").options;
document.getElementById("validationType").value = "";
var datatype;
for(var i=0;i<validationTypes.length;i++)
{
    datatype = validationTypes[i].value.substring(0,validationTypes[i].value.indexOf("_"));

    if(datatype != selectedValue){
        $("#validationType option[value=" + validationTypes[i].value + "]").hide();
    }else{
        $("#validationType option[value=" + validationTypes[i].value + "]").show();
    }
}
}

此功能在 Firefox 中运行良好。但不知何故,它在 IE 8.0 中不起作用。

编辑: 早些时候我认为这可能是它的原因。但它不是。

var rows = $('table.intValidationTable tr');
rows.filter('.rangeTR').css("visibility", "collapse");
rows.filter('.listTR').css("visibility", "collapse");
rows.filter('.textListTR').css("visibility", "collapse");
rows.filter('.dateRangeTR').css("visibility", "collapse");
rows.filter('.dateListTR').css("visibility", "collapse");

似乎是功能的另一部分。显示/隐藏第二个下拉选项的代码不起作用。当前正在显示所有选项。

你们能帮我解决这个问题吗?

如果需要更多代码,请告诉我。

4

3 回答 3

4

visibility: collapse在 IE<8 中没有实现

用于display: none隐藏表格元素。

请参见此处:可见性的替代方法:折叠不适用于 IE 和 Chrome

在这里:http ://reference.sitepoint.com/css/visibility

还要检查下面的代码:

if(datatype != selectedValue){
    $("#validationType option[value=" + validationTypes[i].value + "]").hide();
}else{
    $("#validationType option[value=" + validationTypes[i].value + "]").show();
}

也许尝试添加引号(疯狂猜测,没有真正的希望):

$("#validationType option[value='" + validationTypes[i].value + "']")

您使用的是什么版本的 jQuery?

为我们组装一个 jsFiddle 会很酷。

于 2012-12-10T13:03:43.490 回答
4

没有任何版本的 Internet Explorer(包括 IE8)支持属性值“继承”或“折叠”。

改为使用display:none;

例如:

rows.filter('.rangeTR').css("display", "none");
于 2012-12-10T13:05:41.190 回答
2

好吧,它似乎visibility: collapse也可以在 IE 中使用。我正在使用它,它可以在 IE 和 Firefox 中运行。不知道除了这两个之外的其他浏览器。

我做了以下事情:

HTML:

<table class="intValidationTable">

`<tr class="rangeTR" style="visibility: collapse;">`

`<tr class="listTR" style="visibility: collapse;">`

Javascript + Jquery:

var rows = $('table.intValidationTable tr');

var rangeTR = rows.filter('.rangeTR');

var listTR = rows.filter('.listTR');

rangeTR.css("visibility", "visible");

listTR.css("visibility", "collapse");

这应该工作!

关于我的问题,我猜代码的第二部分是错误的。需要检查一下。

于 2012-12-10T13:29:58.243 回答