如果复选框更改,请使用 jquery 调用 php


If checkbox changes, use jquery to call php

我在页面上有一个简单的复选框,允许用户说他们是否想接收电子邮件通知。我正在使用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