[英]Please help tweak javascript so it works with multiple drop down menus to show/hide table rows
我正在使用一个脚本根据从下拉列表中的选择显示和隐藏表行。 它只有一个下拉菜单就可以正常工作。 但是,当我添加其他下拉菜单时,它会显示隐藏的行,但不会隐藏先前的选择。 因此,除非手动重置列表,否则最终所有内容都会立即显示。 我正在使用CSS display: none
将表行隐藏为默认状态。 我正在工作的网站使用怪癖模式。 不能使用JQuery。 我真的很感谢您的帮助。 我必须认为可以对脚本进行调整,以便可以查看所有选择列表。 谢谢,很抱歉成为这样的菜鸟。
这是一个小提琴: http : //jsfiddle.net/matt_f/e58hk/
这是脚本:
function Cng(obj){
var opts=obj.options;
for (var z0=0;z0<opts.length;z0++){
if (document.getElementById(opts[z0].value)){
document.getElementById(opts[z0].value).style.display=opts[z0].selected?'table-row':'none';
}
}
}
这是我的html:
<select class=evidencemenu onchange="Cng(this);" >
<option value="" >Please select</option>
<!--USE THIS OPTION FOR TESTING -->
<option value="grade3art" >Grades 3-5 Art</option>
</select>
<select class=evidencemenu onchange="Cng(this);" >
<option value="" >Please select</option>
<!--USE THIS OPTION FOR TESTING -->
<option value="grade6ela" >Grades 6-8 ELA</option>
</select>
<select class=evidencemenu onchange="Cng(this);" >
<!--Do not use these for testing -->
<option value="" >Please select</option>
<option value="grade9ela" >Grades 9-12 ELA</option>
<option value="grade9math" >Grades 9-12 Math</option>
<option value="grade9art" >Grades 9-12 Art</option>
</select>
<TABLE width="960" border="1" cellspacing="0" cellpadding="5" summary="Domain 1, Indicator 1a">
<CAPTION>
This is the table caption. </CAPTION>
<TR>
<TH scope="col"> </TH>
<TH scope="col">Below Standard</TH>
<TH scope="col">Developing</TH>
<TH scope="col">Proficient</TH>
<TH scope="col">Exemplary</TH>
</TR>
<TR>
<TD><STRONG>asfghsdfgsd</STRONG></TD>
<TD> </TD>
<TD> </TD>
<TD> </TD>
<TD><EM>sdghsrthdfgbhdfgh</EM><EM></EM></TD>
</TR>
<TR>
<TD valign="top"><STRONG>sdfgsdfgsdf</STRONG></TD>
<TD valign="top">sdfghsdfg</TD>
<TD valign="top">sdfghdsfghfd</TD>
<TD valign="top"> dfghdfghf</TD>
<TD valign="top">sfghdfghdfghdfg</TD>
</TR>
<!--HERE IS THE FIRST HIDDEN ROW. IT IS SELECTED WITH THE FIRST DROP DOWN MENU. -->
<TR valign="top" class=hide ID=grade3art>
<TD><P><STRONG>Sample
Grades 3–5 hidden</STRONG></P>
<P><EM>adfgsdfgsdfgsdfgs</EM></P>
<P><EM>df</EM><EM>gs</EM><EM>dfgsd</EM></P></TD>
<TD><P><STRONG><EM>hidden text goes here</EM></STRONG></P></TD>
<TD><P><EM><STRONG>more hidden text goes here</STRONG></EM></P></TD>
<TD><p><strong><em>third column of hidden text</em></strong></p></TD>
<TD><p><strong><em>another column of hidden text</em></strong></p></TD>
</TR>
<TR>
<TD valign="top"><STRONG>asdfjahs dlkfj<SPAN class="super"></SPAN></STRONG></TD>
<TD valign="top">dafgsdfgsdfg</TD>
<TD valign="top">sdfgsdfgsdfg</TD>
<TD valign="top">sdfghsdfgsdfg</TD>
<TD valign="top">sdfsdfgsdfg</TD>
</TR>
<!--HERE IS THE SECOND HIDDEN ROW. THIS IS SELECTED WITH THE SECOND DROPDOWN MENU. -->
<TR class=hide id="grade6ela">
<TD valign="top"><P><STRONG>Sample </STRONG><STRONG>Grades 6-8 HIDDEN</STRONG></P></TD>
<TD valign="top">TEST TO ...</TD>
<TD valign="top">PRETEND THAT....</TD>
<TD valign="top">THIS IS..</TD>
<TD valign="top">GRADE 6 ELA HIDDEN TEXT</TD>
</TR>
<TR>
<TD valign="top"><STRONG>asfjal;skdjf</STRONG></TD>
<TD valign="top">sadlkjasl;dkfj</TD>
<TD valign="top">;salkdfjg sadl;fkgj</TD>
<TD valign="top">a;lksjdfa;lskdfja;ls</TD>
<TD valign="top">a;lskjfa;lskmnals;kd</TD>
</TR>
CSS:
.hide {
display:none
}
我对您的html进行了一些快速更新,以简化解决方案:
<select name="evidencemenu" id="select1" onchange="Cng(this);" >
<option value="" >Please select</option>
<!--USE THIS OPTION FOR TESTING -->
<option value="grade3art" >Grades 3-5 Art</option>
</select>
<select name="evidencemenu" id="select2" onchange="Cng(this);" >
<option value="" >Please select</option>
<!--USE THIS OPTION FOR TESTING -->
<option value="grade6ela" >Grades 6-8 ELA</option>
</select>
<select name="evidencemenu" id="select3" onchange="Cng(this);" >
<!--Do not use these for testing -->
<option value="" >Please select</option>
<option value="grade9ela" >Grades 9-12 ELA</option>
<option value="grade9math" >Grades 9-12 Math</option>
<option value="grade9art" >Grades 9-12 Art</option>
</select>
注意类周围的引号和添加的ID
然后我稍微改变了js函数:
function Cng(obj){
var opts=obj.options,
elements = document.getElementsByName('evidencemenu'),
i, j, options;
for (i = 0; i<elements.length; i++){
if (elements[i].getAttribute('id') != obj.getAttribute('id')) {
options = elements[i].options
for (j=0; j<options.length; j++){
if (document.getElementById(options[j].value)){
document.getElementById(options[j].value).style.display = 'none';
}
}
elements[i].value = ''
}
}
for (var z0=0;z0<opts.length;z0++){
if (document.getElementById(opts[z0].value)){
document.getElementById(opts[z0].value).style.display=opts[z0].selected?'table-row':'none';
}
}
}
这将遍历所有选择选项,将隐藏的行设置为隐藏,如果不是当前项目,则将它们全部设置为空白。 在这里查看更新的小提琴
编辑:我将类更改为名称,并将js函数更改为getElementsByName,以符合怪癖模式。 看起来现在可以正常工作,并在IE中使用HTML 4.01 Transitional标头进行了测试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.