Php 使用jQuery使用复选框中的值更新URL,并在刷新后保持选中状态

Php 使用jQuery使用复选框中的值更新URL,并在刷新后保持选中状态,php,jquery,Php,Jquery,我发现了一个非常好的jQuery脚本,它可以帮助我从作为数组发送到URL的复选框中获取值。这很好,但我需要在每次选择后刷新页面,但这样做,谷歌浏览器中的复选框将取消选中(在FF中效果良好)。URL保持良好,但复选框均未选中 jQuery中有没有办法在刷新后保持复选框处于选中状态?通常,对于我来说,当希望在发布或刷新后选中复选框时,我可以在复选框中使用if语句,即说if($\u GET[selected]==$value){echo“checked”;} 您可以在此处测试代码: 代码如下所示: &

我发现了一个非常好的jQuery脚本,它可以帮助我从作为数组发送到URL的复选框中获取值。这很好,但我需要在每次选择后刷新页面,但这样做,谷歌浏览器中的复选框将取消选中(在FF中效果良好)。URL保持良好,但复选框均未选中

jQuery中有没有办法在刷新后保持复选框处于选中状态?通常,对于我来说,当希望在发布或刷新后选中复选框时,我可以在复选框中使用if语句,即说if($\u GET[selected]==$value){echo“checked”;}

您可以在此处测试代码:

代码如下所示:

<?
$actual_link = "http://$_SERVER[HTTP_HOST]$_SERVER[PHP_SELF]";
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Konfigurator</title>
<link rel="stylesheet" href="main.css" />
<style type="text/css">
body,td,th {
    font-family: Tahoma, "Titillium Web", sans-serif;
}
</style>
<script src="http://code.jquery.com/jquery-1.11.1.min.js" type="text/javascript"></script>

</head>

<body>

     <div class="flowers">
     <?
    $hent_access  = mysql_query("SELECT * FROM bato_produkter WHERE typen = 2");
    while($hent_access_data = mysql_fetch_array($hent_access)){
    $erstat2 = str_replace('BATO','bata',$hent_access_data[navn]);
    ?>
    <div class="flowers">

    <label>
    <table width="100%" border="0" cellspacing="0" cellpadding="0" >
  <tr>
    <td><img src="images/<?=$hent_access_data[vnr]?>.jpg" width="150" class="apply_image" /></td>
  </tr>
  <tr>
    <td class="product_list_header"><?=$erstat2?></td>
  </tr>
  <tr>
    <td  class="product_list_header">kr. <?=$hent_access_data[pris]?></td>
  </tr>
  <tr>
    <td  class="product_list_header"><input type="checkbox" name="selected[]" value="<?=$hent_access_data[vnr]?>" /></td>
  </tr>
</table>
</label>
    </div>
    <?
    }
    ?>
    </div>

<script>
$('input[type="checkbox"]').on('change', function(e){
var data = [],
loc = $('<a>', {href:window.location})[0];
$('input[type="checkbox"]').each(function(i){
if(this.checked){
data.push(this.name+'='+this.value);
}
});
data = data.join('&');
$.post('<?=$actual_link?>', data);
if(history.pushState){
history.pushState(null, null, loc.pathname+'?cart=<?=$_GET[cart]?>&'+data);
location.reload();
}

});
</script>

</body>
</html>

空想家
正文,td,th{
字体系列:塔荷马,“提香网”,无衬线;
}
.jpg“width=“150”class=“应用图像”/>
韩元。

您在页面加载上而不是在更改事件上迭代选定的框。 您有两个选项,一个提交按钮或每次单击复选框时发布

您提到您希望等到选中所有复选框之后,但是脚本永远不会知道用户已完成单击复选框,除非您有提交按钮。但是,在这种情况下,根据您的问题,您不需要提交按钮

以下内容将在单击“打开”或“关闭”复选框时发布所选值。每次操作复选框时都会触发该事件,您返回的数据可用于操作表或返回HTML。在本例中,它将从hello.php以HTML形式返回数据,然后将该响应放在id为的div元素中“结果”的定义


****新增问题****
.jpg“width=“150”class=“应用图像”/>
韩元。
***为新问题编辑***

在HTML5中,您可以使用History.pushState()在不离开页面的情况下更改url。请注意大写字母H。如果可以使用ajax并更改url,则无需更改页面。为了向后兼容,请使用History.js。是的,但是我需要为一些PHP重新加载页面-正如您所看到的,脚本包含工作正常的pushState,但是我也需要在刷新时保持选中复选框。为什么需要刷新页面?PHP都可以在ajax调用中完成,数据以json返回,信息也可以相应地用js或jQuery更新。如果要加载页面,为什么还要使用pushState()?只需使用window.location加载页面。这是一样的。如果希望复选框保持选中状态,则需要将某些内容传递到url以获取post中可用的GET或post数据。或者只需使用ajaxintesting@zgr024-我需要URL中的值来创建一个PHP循环,该循环检索表中的列id,以显示图像并累积价格。如果这可以在不刷新的情况下“即时”完成,那绝对是很酷的。你能带我上路吗?@MazeyMazey非常感谢@zgr024-等我回到电脑前,我会试试这个。我开始看到你所解释和展示的内容的结构,所以我非常希望能更熟悉这一点。我稍后会测试-再次感谢。这绝对是完美的!它就像一个符咒,我确实更善于理解jQuery中的逻辑:-)我会接受你的答案,我真的很感谢你在这方面的帮助。我还有一个问题,但这与我希望复选框超过一定大小(我已将其存储在hello.php文件中的一个变量中)时隐藏复选框有关。在这里发布一个新问题是正确的吗?。。。再次感谢!实际上,最好先问一个新问题或自己尝试一下。但是将限制放在带有复选框的页面上,而不是放在php中。可以使用表单中的隐藏字段执行此操作,并将数字放置在数据属性中。然后将它们添加到更改事件中。Great@zgr024-我已经编辑了我的帖子,因此最后一部分包含了最后一个问题-如果您有任何问题,请告诉我,因为我有点难以解释:-)请查看我对答案所做的编辑。您不应该使用post来确定使用了什么和可用的内容。事实上,我会考虑不使用POST,因为您可以在没有PHP和新查询的情况下操作HTML,通过将您需要的所有数据属性放置在数据属性中。
<form action="" method="post">

     <?
    $hent_access  = mysql_query("SELECT * FROM bato_produkter WHERE typen = 2");
    while($hent_access_data = mysql_fetch_array($hent_access)){
        $erstat2 = str_replace('BATO','bata',$hent_access_data[navn]);
    ?>

    <label>
    <table width="100%" border="0" cellspacing="0" cellpadding="0" >
  <tr>
    <td><img src="images/<?=$hent_access_data[vnr]?>.jpg" width="150" class="apply_image" /></td>
  </tr>
  <tr>
    <td class="product_list_header"><?=$erstat2?></td>
  </tr>
  <tr>
    <td  class="product_list_header">kr. <?=$hent_access_data[pris]?></td>
  </tr>
  <tr>
    <td  class="product_list_header"><input type="checkbox" name="selected[]" value="<?=$hent_access_data[vnr]?>" /></td>
  </tr>
</table>
</label>
    <?
    }
    ?>
   </form>

<script>
var data = $("form").serialize(); 
var checked = []

$("input[name='selected[]']:checked").each(function ()
{ 
$.ajax({
        url: "hello.php", 
        type: "POST",
        async: true,
        cache: false,
        data: data, 
        success: function(data){ 
            alert(data) 
        }
    }); 
});
</script>
<?php
include('../settings.inc.php');

    foreach ($_POST[selected] as $value) {
    $list_valg = mysql_query("SELECT * FROM bato_produkter WHERE vnr = '$value'");
    $list_valg_data = mysql_fetch_array($list_valg);
    $pris += $list_valg_data[pris]; 
    $space_used += $list_valg_data[funktion];
    }

echo $pris." - Space used ".$space_used."<br/>Total Space available ".$vogn_space;

?>
<form action="" method="post">

    **** ADDED FOR NEW QUESTION ****
    <input type="hidden" id="totalSpaces" value="12"> 

<?
    $hent_access  = mysql_query("SELECT * FROM bato_produkter WHERE typen = 2");
    while($hent_access_data = mysql_fetch_array($hent_access)) {
        $erstat2 = str_replace('BATO','bata',$hent_access_data[navn]);
?>

    <table width="100%" border="0" cellspacing="0" cellpadding="0" >
        <tr>
            <td><img src="images/<?=$hent_access_data[vnr]?>.jpg" width="150" class="apply_image" /></td>
        </tr>
        <tr>
            <td class="product_list_header"><?=$erstat2?></td>
        </tr>
        <tr>
            <td class="product_list_header">kr. <?=$hent_access_data[pris]?></td>
        </tr>
        <tr>
            *** EDITED FOR NEW QUESTION ***
            <td class="product_list_header"><input type="checkbox" name="selected[]" value="<?=$hent_access_data[vnr]?>" data-spaces="<?=$hent_access_data['pris']?>" /></td>

        </tr>
    </table>
<?
    }
?>


</form>
<div id="result"></div>   

<script>
    *** ADDED FOR NEW QUESTION *** 
    var totalSpaces = $('#totalSpaces').val();
    var usedSpaces = 0;

    // triggered when user clicks a checkbox
    $('input[name="selected[]"]').on('change',function () { 


        *** ADDED FOR NEW QUESTION ***
        currentSpaces = parseInt($(this).data('spaces');

        if ($(this).is(':checked')) usedSpaces += currentSpaces;
        else usedSpaces -= currentSpaces;

        if (usedSpaces > totalSpaces) {
            alert('Will not fit');
            return false;
        }           


        // grabs the selected checkbox values
        var data = $("form").serialize(); 


        // Sends the data via POST to hello.php
        $.ajax({ 
            url: "hello.php", 
            type: "POST",
            dataType: 'html',
            async: true,
            cache: false,
            data: data,
            success: function(data) { 

                *** ADDED FOR NEW QUESTION ***
                if (usedSpaces == totalSpaces) {
                    alert ('All spaces used');
                    $('input[name="selected[]"]').not(':checked').prop('disabled',true);
                }
                else {
                    $('input[name="selected[]"]').prop('disabled',false);
                }
                $('#result').html(data);
            }
        }); 
    });

</script>