2011-05-19 35 views
2

我在页面上有一个简单的复选框,允许用户说他们是否想接收电子邮件通知。我使用jquery来调用一些php代码,当复选框发生变化时。然而,即使调用jquery函数,我也没有多少运气(单击checkbox什么也不做),更不用说测试后端的功能了。如果复选框发生变化,请使用jquery调用php

任何帮助指出错误会很好。谢谢。

复选框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() { 
{); 
+3

在你的PHP,你应该引用您的数组键:'$ _POST ['checked']'和'$ _POST ['email']''。 – 2011-05-19 19:38:25

+0

很好,谢谢。 – zee 2011-05-19 19:53:33

回答

3

为什么不用.click()代替?

JSFIDDLE

此外,你可以在我的jsfiddle例子中看到,使用​​代替attr('checked')

编辑@Rocket后,在你的讯息:

你确实应该引用在你的PHP你$_POST值!没有注意到我自己,积分rocket

+0

谢谢。我看到这个工程在你的jsFiddle代码中,但是对于我来说,我无法弄清楚为什么在我的复选框上(使用.is(':checked')更改)没有任何反应!我甚至会像你一样发出警报jsFiddle,但仍然点击复选框不会执行任何操作。哎呀。 – zee 2011-05-19 19:55:37

+0

可能是一个愚蠢的问题,但是如果jquery函数不在 zee 2011-05-19 21:10:57

1

控制器的名称是什么?你需要把它放在URL中。

$.post("/controller/update_notify", ... 
+0

正确,我确实在我的代码中有这个,但是为了简洁起见,它将它从示例贴纸中移除。 – zee 2011-05-19 21:06:32

0

问题是与在jQuery的1.6 attr功能的重新定义,并与属性和特性之间的差异。

对于属性(使用attr检索),checked="checked"或其缺失的值保持不变,无论是否实际检查元素。

通过属性(从jQuery 1.6开始使用prop检索),找到元素的实际状态。这相当于检查元素的checked属性(因为您不需要执行新的jQuery选择,所以这比较合适)。最好soltion情况如下:

if (this.checked) { 

见jsFiddles显示此: