如果复选框发生变化,请使用 jquery 调用 php
Posted
技术标签:
【中文标题】如果复选框发生变化,请使用 jquery 调用 php【英文标题】:If checkbox changes, use jquery to call php 【发布时间】:2011-08-29 03:58:59 【问题描述】:我在页面上有一个简单的复选框,允许用户说他们是否愿意接收电子邮件通知。当复选框更改时,我正在使用 jquery 来调用一些 php 代码。但是,即使调用 jquery 函数(单击复选框没有任何作用),我也没有太多运气,更不用说测试后端功能了。
指出错误的任何帮助都会很棒。谢谢。
复选框 html:
<input id="notify_checkbox" type="checkbox" value="y" name="notify">
jquery:
$('#notify_checkbox').change(function()
if($('#notify_checkbox').attr('checked'))
$.post("/update_notify", checked: "y", email: "<?php echo $this->session->userdata('email');?>" );
$( "#notifyresult" ).html( "<p>Awesome, we'll send you an email!</p>" );
else
$.post("/update_notify", checked: "n", email: "<?php echo $this->session->userdata('email');?>" );
$( "#notifyresult" ).html( "<p>Okay, we won't email you.</p>" );
);
最后是 PHP:
function update_notify()
// Passed through AJAX
$notify = $_POST[checked];
$email = $_POST[email];
$this->load->model('musers');
$query = $this->musers->update_user_notify($email, $notify);
解决方案: 下面的 cmets 很有帮助,但不是最终解决方案。解决方案是在我的代码周围添加以下内容。
$(document).ready(function()
);
【问题讨论】:
在你的 PHP 中,你应该引用你的数组键:$_POST['checked']
和 $_POST['email']
。
【参考方案1】:
为什么不改用.click()
?
JSFIDDLE
此外,正如您在我的 JSFiddle 示例中所见,使用 .is(':checked')
而不是 attr('checked')
。
编辑:
您确实应该在您的 php 中引用您的 $_POST
值!自己没注意到,感谢rocket
【讨论】:
谢谢。我看到这在您的 jsFiddle 代码中有效,但是对于我的生活,我无法弄清楚为什么单击我的复选框(使用 .is(':checked') 更改)没有任何反应!我什至像你jsFiddle一样发出警报,但仍然单击复选框什么都不做。咕噜。 可能是一个愚蠢的问题,但是如果 jquery 函数不在 标记之间,这有关系吗?我有它在视图的主体,而不是标题。【参考方案2】:你的控制器叫什么名字?你需要把它放在 URL 中。
$.post("/controller/update_notify", ...
【讨论】:
正确,我的代码中确实有这个,但为了简洁起见,我从这里的示例粘贴中删除了它。【参考方案3】:问题在于 jQuery 1.6 中 attr
函数的重新定义,以及属性和属性之间的区别。
对于属性(使用attr
检索),checked="checked"
的值或其缺失保持不变,无论该元素是否实际被检查。
使用属性(从 jQuery 1.6 开始使用 prop
检索),可以找到元素的实际状态。这等效于检查元素的checked
属性(这是可取的,因为您不需要进行新的jQuery 选择)。最好的解决方案如下:
if (this.checked)
查看 jsFiddles 显示此内容:
your current solution usingprop
using this.checked
【讨论】:
以上是关于如果复选框发生变化,请使用 jquery 调用 php的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 jQuery 重新填充表单提交时隐藏的 CSV 字段