如果复选框发生变化,请使用 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')

在@Rocket 对您的帖子发表评论后

编辑

您确实应该在您的 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 using prop using this.checked

【讨论】:

以上是关于如果复选框发生变化,请使用 jquery 调用 php的主要内容,如果未能解决你的问题,请参考以下文章

Jquery复选框被选中?

如何使用 jQuery 重新填充表单提交时隐藏的 CSV 字段

如何取消选中除使用 jQuery 的复选框之外的所有复选框?

获取复选框jquery的当前状态[重复]

检测jQuery中的输入变化?

过滤Listview数据后勾选(选中)复选框的位置发生变化