我刚用CodeIgniter应用程序遇到了一个奇怪的问题。我正在使用jQuery .on('submit')
事件处理程序来捕获所有表单提交并遵循以下过程:使用this
获取表单对象,存储该对象以供以后使用,检查用户是否使用AJAX调用登录,如果登录,则获取存储的jQuery表单对象,并使用form.submit()
提交表单。
这适用于我的所有表单(表单验证工作正常,正确返回验证错误),除非我有一个form
checkbox
。该复选框刚被忽略。
我使用required
表单验证规则来确保用户在继续之前勾选复选框,并且当禁用此事件处理程序时它完全正常但是,当我添加另一个{时,奇怪地出现验证错误{ {1}}表单不是input
!
我想知道是否有人能够理解为什么会出现这种错误的理论?我可以发布代码,但我大约90%确定这与JavaScript处理我不知道的复选框数据发布的方式有关。
有什么想法吗?
答案 0 :(得分:2)
Javascript本身并不会发布任何表单数据。
在标准HTML提交中,如果复选框未选中,则表示没有为该项目提交的键/值。
我已经学会了很多Javascript表单序列化程序(由Ajax调用使用)的简单方法,并且不遵循标准......我花了几天时间编写自己的{{1测试几乎比代码本身长。
您需要做的是使用调试工具(Firefox或Chrome)并观看网络标签 - 查看确切提交的内容。
答案 1 :(得分:0)
在Jeremy J Starcher的非常有用的建议下,我解决了这个问题。由于$ _POST数组为空,CodeIgniter的表单验证未运行。通常,即使只有一个输入字段(复选框),实际提交按钮的值也会被POST,因此即使没有选中复选框并且没有发布它的值,也会填充$ _POST数组。通过提交按钮的值。但是,当使用Javascript提交表单时,提交按钮的值将被忽略而不会被POST(感谢Jeremy提供的重要信息)。
解决方案是添加一个空白的隐藏输入字段(总是POST的类型,无论值如何)。可能有一种更好的方法来解决这个问题,使用Javascript来创建一个空白的POST变量或其他东西,我欢迎进一步的答案。
作为旁注,我对CSRF验证如何成功以及$ _POST数组是空的感到困惑 - 我检查了CodeIgniter的安全类,基本上它检查了CSRF POST变量,如果它&#39 ; s很好,它取消了它,所以当$ _POST数组访问表单验证类时,它 为空。