使用javascript复选框事件切换html的可见性

时间:2013-10-15 19:33:01

标签: javascript css checkbox

如果商品要转到帐单邮寄地址,我已经拼凑了这些javascript函数来隐藏购物车地址表单上的送货地址字段。这些函数切换了由...包装的html的可见性。

function getItem(id) {
    var itm = false;
    if(document.getElementById)
        itm = document.getElementById(id);
    else if(document.all)
        itm = document.all[id];
    else if(document.layers)
        itm = document.layers[id];
    return itm;
}
function showHideItem(id) {
    itm = getItem(id);
    if(!itm)
        return false;
    if(itm.style.display == 'none')
        itm.style.display = '';
    else
        itm.style.display = 'none';
    return false;
}

如果加载一个新的地址表单,它的工作正常,我遇到的问题是如果他们提交带有复选框的表单,并且验证失败,表单会重新加载并勾选复选框,但不幸的是字段是可见的,所以现在删除复选框隐藏字段!!

<tr><td class="white"><strong>Delivery Address</strong></td>
    <td>Tick <input Type="checkbox" id="deliver_same" value="yes" onClick="showHideItem('delAddress')" />
  If delivery address is billing address</td></tr>
    <tbody id="delAddress">
    <tr><td>Address line 1</td><td><input class="text" name="saddr1" value="" /></td></tr>
    ...
    <tr><td>Post /Zip Code</td><td><input class="text" name="spostalcode" value="" /></td></tr>
</tbody>

我想我需要的是一个onload事件,如果在表单加载时勾选了复选框,则会隐藏字段。刚刚写完这篇文章,我可能会有所作为但却没有信心。请不要提及jquery,它不是项目的选择。

2 个答案:

答案 0 :(得分:1)

function checkDeliverSame() {
    var deliverSame = getItem('deliver_same');
    var deliveryAddress = getItem('delAddress');
    if (deliverSame.checked) {
        deliveryAddress.style.display = 'none';
    } else {
        deliveryAddress.style.display = 'block';
    }
}
checkDeliverSame();  /* This runs the function on page load */

将该功能与getItem功能一起放在</body>标记的正上方,然后在复选框输入中点击它。您还需要将id#delAddress元素从tbody更改为div,以便getItem函数可以使用它。

这是一个小提琴:http://jsfiddle.net/JuNhN/1/

答案 1 :(得分:0)

我修改了Josh的函数以使其更通用,更喜欢document.getElementById(),因为它更适合itm.style.display。我不完全信任checkDeliverSame();在结束标记后不久在html中直接调用。

function checkHiddenRows(id) {
    deliverSame = getItem('deliver_same');
    itm = document.getElementById(id);
    if (deliverSame.checked == true) {
        itm.style.display = 'none';
    } // else { alert('Checkbox not checked') } // Verify the checkbox state
}

<script>checkHiddenRows('deliveryAddress');</script>

表单现在按预期工作。