我在页面上有一个简单的复选框,允许用户说他们是否想接收电子邮件通知。我正在使用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);
}
解决方法:下面的评论很有帮助,但不是最终的解决方案。解决方案是在我的代码周围添加以下内容。
$(document).ready(function() {
{);
为什么不使用.click()
呢?
吉斯菲德尔
另外,正如您在我的 JSFiddle 示例中所看到的,使用 .is(':checked')
而不是 attr('checked')
。
@Rocket评论您的帖子后编辑:
你确实应该在你的 php 中引用你的$_POST
值!我自己没注意到,归功于火箭
控制器的名称是什么? 您需要将其放在URL中。
$.post("/controller/update_notify", ...
问题在于 jQuery 1.6 中对 attr
函数的重新定义,以及属性和属性之间的差异。
对于属性(使用 attr
检索),无论是否实际检查元素,checked="checked"
的值或其缺失都保持不变。
使用属性(从 jQuery 1.6 开始使用 prop
检索),可以找到元素的实际状态。 这相当于检查元素的 checked
属性(这更可取,因为您不需要执行新的 jQuery 选择)。 最好的解决方案如下:
if (this.checked) {
参见 jsFiddles 显示这一点:
- 您当前的解决方案
- 使用
prop
- 使用
this.checked