我的表单中有一些复选框:通过选中一个,您可以禁用另一个复选框。以下代码非常有效。问题是当用户在提交后收到错误(当页面重新加载时),再次启用禁用的复选框。但我希望它能够保持其残疾状态。
<label for="Q09_01">
<input class="Q09" name="Q09[]" id="Q09_01" type="checkbox" />
aaa</label>
<label for="Q09_02">
<input class="Q09" name="Q09[]" id="Q09_02" type="checkbox" value="Q09_02" />
bbb</label>
<label for="Q09_03">
<input class="Q09" name="Q09[]" id="Q09_03" type="checkbox" value="Q09_03" />
ccc </label>
<label for="Q09_04">
<input class="Q09" name="Q09[]" id="Q09_04" type="checkbox" value="Q09_04" />
ddd </label>
jQuery的:
$(function(){
$('#Q09_01').click(function() {
$('#Q09_03').attr('disabled', this.checked);
});
$('#Q09_03').click(function() {
$('#Q09_01').attr('disabled', this.checked);
});
})
除了这个特定的问题,我还有另一个与单选按钮(maintain the state of a radio-toggled div after page reload)类似的问题,并在页面重新加载时保持显示/隐藏/切换状态。是否有一些jQuery函数会在页面重新加载后记住所有这些状态?你觉得这个http://www.jasonsebring.com/dumbFormState能帮助我实现目标吗?我是jquery的新手,我会感谢任何帮助或暗示或良好实践的例子。
答案 0 :(得分:0)
有两种方法可以做到这一点。您可以通过检查POST输入并匹配它来在服务器端脚本中处理此问题。基本上,检查变量是否已定义(或具有值),如果未定义,则禁用该框。在你的情况下,实际上,你正在检查实际提交的值,所以这实际上只是遵循你的jQuery逻辑。一些原始的PHP例如:
$disable_Q09_01 = $_POST['Q09'] == "Q09_03"
<input class="Q09" name="Q09[]" id="Q09_01" type="checkbox"
<? if ($disable_Q09_01) echo "disabled"; ?>
/>
原谅我,自PHP以来已经有一段时间了,我只是觉得它比给Rails代码更常见。
另一种方法是在提交表单之前创建一个cookie。 W3记录了所有这些here。基本上设置"disable_Q09_01=true"
的cookie,然后根据应用程序读取或清除它。我相信这种方法不太合乎需要,因为用户可能关闭了cookie,但无论你使用什么服务器端脚本,这都会起作用(ish)。
答案 1 :(得分:0)
您是否尝试使用本地或会话存储来存储输入的状态? 然后,如果存在会话或本地存储,则可以在页面加载时加载输入状态。
这可以使用javascript / jquery
完成它不会解决任何服务器代码或cookie
试试这个以获取更多信息
http://www.beakkon.com/tutorial/html5/web-storage
@ atmd83
答案 2 :(得分:0)
您不能使用jQuery来记住页面状态。刷新页面时,将重新发送HTML,将其默认为原始状态。如果您愿意使用服务器端语言(如PHP),那么情况就不一定如此。但正如您在评论中所说,您不想使用PHP。
因此,您有两种选择:
#2,因此我建议使用#1。实质上,当用户检查框时,会创建/更新cookie。然后在页面重新加载时,在文档准备好后($(document).ready(..)
),您将使用JavaScript来读取cookie并对DOM进行必要的更改(即检查正确的框)。
Here's a commonly used jQuery cookie plugin.
如果您在创建/更新/阅读Cookie时遇到问题,您应该专门发布一个新问题。