【问题标题】:How do you maintain the state of a checkbox-toggled div after page reload?页面重新加载后如何维护复选框切换 div 的状态?
【发布时间】:2011-12-06 20:25:07
【问题描述】:

我有一个 div 在选中复选框时出现,在未选中时隐藏。如果表单有错误,页面会重新加载,并且即使在提交之前选中了复选框,div 也会隐藏。我可以添加对 onLoad 事件的调用,但是有没有更简洁的方法来确保在页面重新加载后,根据复选框的状态呈现 div?

CSS:

#maintenance-window { display: none; }

jQuery:

$("#check-hasMaintenance").click(function() {
    $(this).is(":checked") ? $('#maintenance-window').show("fast") : $('#maintenance-window').hide("fast")
});

HTML:

<input type="checkbox" value="1" id="check-hasMaintenance">
<div id="maintenance-window">
    Stuff
</div>

【问题讨论】:

  • 这就是我会做的。
  • 同意,如果你不想做某种服务器端验证并在页面时向 div 添加一个额外的类,恐怕你会被 JavaScript 和 onLoad 困住被渲染,隐藏了 div。

标签: javascript jquery


【解决方案1】:

选项 1

确保页面加载时根据复选框显示 div:

$(document).ready(function() {
     // Modified for readability - inline if is fine.
     if($("#check-hasMaintenance").is(":checked"))
         $('#maintenance-window').show("fast")
     else
         $('#maintenance-window').hide("fast");
});

简化的隐藏/显示代码:

$("#check-hasMaintenance").click(function() {
    $('#maintenance-window').toggle('fast');
});

选项 2

这样的简写版本也应该可以:

$(document).ready(function() {
    $('#maintenance-window').toggle($("#check-hasMaintenance").is(":checked"));
});

$("#check-hasMaintenance").click(function() {
    $('#maintenance-window').toggle('fast');
});

【讨论】:

  • 在您的第一个示例中,我必须将this 更改为对象ID,否则文档将不知道我所说的this 是什么意思,对吧?
  • @Mohamad,刷新页面,我很久以前就修复了复制 + 粘贴错误 :)
  • 谢谢。我可以确认速记版本有效。我将 JS 放在一个单独的文件中,该文件已加载到正文中。我将所有内容都包裹在 $(function() {}); 中——如果我没有内联 JS,这有必要吗?
猜你喜欢
  • 2012-02-18
  • 2016-01-03
  • 2021-03-01
  • 2013-11-09
  • 2016-08-23
  • 2015-10-18
  • 1970-01-01
  • 2010-10-17
  • 1970-01-01
相关资源
最近更新 更多