style.display不适用于Chrome,Safari - Firefox,IE11确定 [英] style.display not working in Chrome, Safari - Firefox, IE11 OK
问题描述
我有一个带有跨浏览器问题的简单表单。表格有两个选择列表,class_chorus和伴奏。在页面加载时,会显示class_chorus并隐藏伴奏。如果用户选择儿童合唱选项,则应显示伴奏选择列表。它在Firefox 35和IE11中正常工作。我无法在Chrome 40或Safari 5.1.7中使用它。我在这里错过了什么?
I have a simple form with cross-browser issues. The form has two select lists, "class_chorus" and "accompaniment". On page load, class_chorus is displayed and accompaniment is hidden. If the user selects the Children’s Chorus option, the accompaniment select list should display. It works correctly in Firefox 35 and IE11. I cannot get it to work in Chrome 40 or Safari 5.1.7. What am I missing here?
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<form method="post" action="">
<table id="formTable" border="0">
<tr valign="top" style="margin-bottom:0">
<td>Class/Chorus </td>
<td>
<select name="class_chorus" size="1">
<option value="" onclick="hideAccomp();">Any</option>
<option value="Preschool" onclick="hideAccomp();">Early Childhood</option>
<option value="Elementary" onclick="hideAccomp();">Elementary</option>
<option value="Childrens Chorus" onclick="showAccomp();">Children's Chorus</option>
</select>
</td>
</tr>
<tr valign="top" style="margin-top:0; margin-bottom:0; padding-top:0; padding-bottom:0">
<td>
<div id="accomp" style="display:none"><br />
Accompaniment<br /><br />
</div>
</td>
<td>
<div id="accomp2" style="display:none"><br />
<select name="accompaniment" id="accompaniment" size="1" >
<option value="">Any</option>
<option value="None">None</option>
<option value="Piano">Piano</option>
</select>
</div><br />
</td>
</tr>
</table>
</form>
<script type="text/javascript">
function showAccomp() {
document.getElementById("accomp").style.display = "inline";
document.getElementById("accomp2").style.display = "inline";
}
function hideAccomp() {
document.getElementById("accomp").style.display = "none";
document.getElementById("accomp2").style.display = "none";
}
</script>
</body>
</html>
推荐答案
个别< option>
元素的事件侦听器,而不是< select>
(浏览器 VERY 挑剔你可以用< option>
元素做什么>。
You are probably running into issues as a result of putting the event listener on the individual <option>
elements, rather than the <select>
(browsers are VERY picky about what you can do with <option>
elements).
尝试绑定对< select>
的一个函数 onchange
,取而代之的是,新的价值,并基于此触发正确的功能。
Try binding a function to the onchange
for the <select>
, instead, and then, when the value changes, get the new value and trigger the correct function based on that.
尝试使用已有的代码,可以这样做:
Trying to use the code that you already have, you could do something like this:
<select name="class_chorus" size="1" onchange="toggleAccomponement(event);">
<option value="">Any</option>
<option value="Preschool">Early Childhood</option>
<option value="Elementary">Elementary</option>
<option value="Childrens Chorus">Children's Chorus</option>
</select>
。 。 。然后在< script>
部分:
. . . and then, in the <script>
section:
function toggleAccomponement(event) {
var sCurrSelection = event.target.value;
if (sCurrSelection === "Childrens Chorus") {
showAccomp();
}
else {
hideAccomp();
}
}
这篇关于style.display不适用于Chrome,Safari - Firefox,IE11确定的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!