0

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

我可以在页面刷新时保持复选框处于选中状态,但是当页面 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
    });
});
4

3 回答 3

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 变量来跨越页面,而无需每次都使用表单。

于 2013-08-11T18:22:00.913 回答
0

RCNeil 的回答是正确的,如果设置了 post 键 'sa',复选框将被选中="checked"。

为了扩展他的答案,它不必来自 post 值,它可以从数据库中或任何地方提取。它只需要返回一个布尔值(真/假)。以下也将起作用:

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

将返回为 checked="checked" 和默认标记的复选框。(除非,布尔假)

于 2013-08-11T18:32:03.183 回答
-1
<input type="checkbox" name="sa" class="checkbox" checked="checked" value="forever"
      <?=(isset($_POST['sa'])?:'')?>/>Samsung<br>

我想这应该工作

于 2013-08-11T18:30:24.247 回答