单选按钮并且不显示

时间:2012-12-08 14:59:44

标签: javascript

我正在创建一个订单表单,当单击一个按钮时,它会在一个单独的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" />

2 个答案:

答案 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的另一个调用时隐藏它。

<强>除了:

您可以了解如何在现代世界中完成事件处理。这是旧的做法,并不是完全可以控制的。

另外,请考虑研究模块化和封装技术。