jquery提交更改复选框

时间:2012-07-30 00:47:22

标签: php jquery checkbox submit

我有以下代码,但问题是如果我使用普通的提交按钮一切正常,但如果我想用jquery onchange提交复选框值它不起作用(即没有任何进入数据库)...我甚至尝试使用附加onChange=this.form.submit()的非jquery路线进行施工。有谁知道发生了什么/如何解决这个问题?对我而言,似乎表单在没有处理数据的情况下提交。

我也在使用https://github.com/ghinda/css-toggle-switch作为复选框

JQUERY:

$('#construction').change(function() {
  this.form.submit();
});

PHP:

<?php
$config = mysql_query("SELECT construction FROM config") or die(mysql_error());
$row_config = mysql_fetch_assoc($config);

if ($_POST) {
    // 0 = off
    // 1 = on
    $constr = $_POST['construction'];
    if ($constr == 'on') { $c = 0; } else { $c = 1; }
    mysql_query("UPDATE config SET construction = '".$c."'") or die(mysql_error());
    redirect('index.php');
}
?>

HTML:

<div style="margin-top:30px;">
        <form action="index.php" method="post" id="doSite">
            <fieldset class="toggle">
                <input id="construction" name="construction" type="checkbox"<?php if($row_config['construction'] == '0') { echo ' checked'; } ?>>
                <label for="construction">Site construction:</label>
                <span class="toggle-button"></span>
            </fieldset>
            <input name="Submit" type="submit" value="Shutdown site" class="button">
        </form>
    </div>

3 个答案:

答案 0 :(得分:2)

试试这个,

$('#construction').change(function() {
  $(this).closest("form").submit();
});

DEMO

答案 1 :(得分:1)

将您的jquery更改为:

$('#construction').change(function() {
  $("#doSite").submit();
});

doSite是您的表单ID,因此您可以在选中或取消选中复选框时直接使用它来提交表单。

我更新了你的代码:
- 使用isset检查是否设置了变量 - 表单提交时未检查的复选框不包含在$ _POST数据中:这意味着您只需检查是否设置了$ _POST ['construction'](其值无关紧要)
- 因为你在mysql_query中使用双引号,所以不需要连接。并且,如果construction字段是INT类型,则可以删除$ c周围的单引号

<?php
$config = mysql_query("SELECT construction FROM config") or die(mysql_error());
$row_config = mysql_fetch_assoc($config);

if(isset(($_POST))
{
    // 0 = off
    // 1 = on
    if(isset($_POST['construction']))
        $c = 1;
    else
        $c = 0;
    mysql_query("UPDATE config SET construction = '$c'") or die(mysql_error());
    redirect('index.php');
}
?>

注意:有一天,所有mysql_ *函数都将被弃用并删除。如果可能,您应该使用MySQLiPDO代替 更多内容:
http://php.net/manual/en/faq.databases.php#faq.databases.mysql.deprecated
http://php.net/manual/en/mysqlinfo.api.choosing.php

答案 2 :(得分:0)

为什么不使用:

$("#checkid").click(function(){

})