除非取消选中,否则保持复选框状态

时间:2013-08-11 18:17:28

标签: php jquery html

我问了这个问题,但没有得到解决方案。通过简短的解释,我希望检查复选框保持检查,除非用户未选中:在页面刷新。

我能够在页面刷新时检查框,但是当页面ID更改(我有分页)时,如index.php?page=2这些框未经检查,那么有没有办法可以让框保持检查,除非即使页面ID更改,也会取消选中?

我正在显示数据库的结果,用户可以过滤结果。如果用户点击下一页以获得更多结果,我希望保持选中的复选框保持不变,以便我可以显示第2页的过滤结果。我真的需要帮助。感谢

<form id="form" method="post" action="">
            <input type="checkbox" name="sa" class="checkbox" <?=(isset($_POST['sa'])?' checked':'')?>/>Samsung<br>
 </form>

<script>
$(document).ready(function(){
     $('.checkbox').on('change',function(){
        $('#form').submit();
     });
});



</script>

我已尝试过这个jquery函数以及上面的函数但它不起作用。

$("input.checkbox").each(function() {
    var mycookie = $.cookie($(this).attr('name'));
    if (mycookie && mycookie == "true") {
        $(this).prop('checked', mycookie);
    }
});
$("input.checkbox").change(function() {
    $.cookie($(this).attr("name"), $(this).prop('checked'), {
        path: '/',
        expires: 365
    });
});

3 个答案:

答案 0 :(得分:1)

我认为这就是你所需要的:

<input type="checkbox" name="sa" class="checkbox" value="yes"
      <?php echo ($_POST['sa'] == 'yes')? ' checked="checked"':'' ?>/>Samsung<br>

正确的标记是

checked="checked"

根据您的情况保持活跃。

仅当您继续浏览其他页面使用正在使用的表单才能访问它们时,才会出现这种情况。如果您只希望人们使用该表单一次,您应该设置一个SESSION或GET变量,以便在不使用表单的情况下通过其他页面传递该值。

因此,举例来说,保持表格几乎相同,除了改变你的条件并在你吐出表格之前将其包括在你的标题中 -

<?php 
session_start();
if(isset($_POST['changeit']))  {
    if( $_POST['sa'] == 'yes') {
        $_SESSION['checked'] = true; 
    } else {
        $_SESSION['checked'] = false; 
    }
}
?>

然后让你有条件吐出检查:

<input type="checkbox" name="sa" class="checkbox" value="yes"
  <?php echo ($_SESSION['checked'] == true)? ' checked="checked"':'' ?>/>Samsung<br>

并包含一个隐藏的输入,仅检查复选框是否已更改。

<input type="hidden" name="changeit" />

这样,只有在选中或取消选中表单复选框时才会检查设置会话的条件...所以整个结构看起来应该是这样的 -

<?php session_start(); ?>
<!DOCTYPE HTML>
<HTML>
<HEAD>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
</HEAD>
<BODY>
<?php 
if(isset($_POST['changeit']))  {
    if( $_POST['sa'] == 'yes') {
        $_SESSION['checked'] = true; 
    } else {
    $_SESSION['checked'] = false; 
    }
}
?>
<form id="form" method="post" action="">
   <input type="checkbox" name="sa" class="checkbox" value="yes"
      <?php echo ($_SESSION['checked'] == true)? ' checked="checked"':'' ?>/>Samsung<br>
    <input type="hidden" name="changeit" />  
 </form>

<script>
$(document).ready(function(){
     $('.checkbox').on('change',function(){
        $('#form').submit();
     });
});
</script>
</BODY>
</HTML>

基本的注意事项是,如果没有使用表单,POST变量将不会从页面转移到页面。不调用“动作”,因此不发送帖子。您必须使用COOKIES或SESSIONS或GET变量才能跨越页面而不必每次都使用表单。

答案 1 :(得分:0)

RCNeil的答案是正确的,因为如果设置了帖子键“sa”,则复选框将被选中=“已选中”。

为了扩展他的答案,它不一定是来自一个post值,它可以从数据库中提取,也可以从任何地方提取。它只需要返回一个布尔值(True / False)。以下也可以:

//Some logic
$YourVariable = true; //for example
//Then the checkbox conditional
<input type="checkbox" name="sa" class="checkbox"
      <?=($YourVariable)?' checked="checked"':'')?>/>Samsung<br>

将返回checked =“checked”并默认标记复选框。 (除非,bool假)

答案 2 :(得分:-1)

<input type="checkbox" name="sa" class="checkbox" checked="checked" value="forever"
      <?=(isset($_POST['sa'])?:'')?>/>Samsung<br>

我想这应该可行