我正在创建一个订单表单,当单击一个按钮时,它会在一个单独的div中显示一个图像。代码适用于复选框,但单选按钮不会隐藏先前单击的图像。
function displayImage(id) {
var el = document.getElementById(id);
if (el.style.display == "inline") {
el.style.display = "none";
} else {
el.style.display = "inline";
}
}
<tr>
<td>
<input type="radio" name="cheese" id="chkcheese" value="Yellow American" onclick="displayImage('imgamerican');" />
<label for="chkcheese">Yellow American</label>
</td>
<td>
<input type="radio" name="cheese" value="Pepper Jack" id="pepperjack" onclick="displayImage('imgjack');" />
<label for="chkjack">Pepper Jack</label>
</td>
<td>
<input type="radio" name="cheese" value="Mozzarella" id="chkmozz" onclick="displayImage('imgmozz');"/>
<label for="chkmozz">Mozzarella</label>
</td>
</tr>
<div class="cheese">
<img id="imgamerican" src="images/american-cheese-slice.png" style="display:none"/>
<img id="imgcheddar" src="images/agedcheddar.png" style="display:none"/>
<img id="imgjack" src="images/pepperJack.png" style="display:none" />
<img id="imgswiss" src="images/swisscheese.png" style="display:none" />
答案 0 :(得分:1)
点击事件仅发生在点击的广播中。
您需要迭代单选按钮并确保取消选择的单元隐藏了相应的图像,或者只是迭代图像并隐藏它们,然后再显示单击其无线电的图像。
function displayImage(id) {
var imgs = document.querySelectorAll(".cheese > img");
for (var i = 0; i < imgs.length; i++) {
imgs[i].style.display = "none";
}
document.getElementById(id).style.display = "inline";
}
答案 1 :(得分:0)
看起来您的问题是,当单选按钮变为click
时,您希望unchecked
事件触发。但事实并非如此。您需要专门更改最后显示的奶酪的显示,但只有当它是单击的单选按钮时才会显示。
这个解决方案有点像黑客,但它应该适用于这种情况:
JavaScript的:
var lastUnique;
function displayImage(id, unique) {
var el = document.getElementById(id);
if (unique) {
if (lastUnique) {
lastUnique.style.display = 'none';
}
lastUnique = el;
}
el.style.display = 'block';
}
单选按钮(注意添加的true
):
<tr>
<td><input type="radio" name="cheese" id="chkcheese" value="Yellow American" onclick="displayImage('imgamerican', true);" />
<label for="chkcheese">Yellow American</label></td>
<td><input type="radio" name="cheese" value="Pepper Jack" id="pepperjack" onclick="displayImage('imgjack', true);" />
<label for="chkjack">Pepper Jack</label></td>
<td><input type="radio" name="cheese" value="Mozzarella" id="chkmozz" onclick="displayImage('imgmozz', true);" />
<label for="chkmozz">Mozzarella</label></td>
</tr>
因此,JavaScript会跟踪显示的最后一个元素,其中唯一参数为truthy,并在发生unique == true
的另一个调用时隐藏它。
<强>除了:强>
您可以了解如何在现代世界中完成事件处理。这是旧的做法,并不是完全可以控制的。
另外,请考虑研究模块化和封装技术。