2

我试图在选中或取消选中复选框以及检查和取消选中的 if 语句后重新加载后保留复选框状态。我做错了什么或最好的方法是什么?

$('.js-bbCheckbox').click(function(event) {

    $('.js-bbCheckbox').change(function(){
            if($(this).is(':checked')){
                window.location = '?filter=topRated'; 

            }else{
                window.location = '?filter=nottopRated';
            }
        });
4

2 回答 2

0

这不是完全错误的,因为它会起作用。但是一旦用户关闭页面并再次打开它,复选框将具有其默认状态。

如果您想在会话之间保留复选框的状态,您可以使用 cookie。您可以使用该document.cookie属性使用 JavaScript 设置 cookie,但您最好查一下,因为它有点复杂。

但是,如果您在此应用程序上使用任何服务器端技术,则可以从那里设置 cookie。例如,在 PHP 中它会是这样的:

$_COOKIE['checkbox-topRated'] = isset($_GET['topRated']);

然后,当您打印复选框时,您会检查该 cookie 是否为真。那会是这样的:

$checked = '';
if ($_COOKIE['checkbox-topRated']) {
    $checked = ' checked="checked"';
}

echo '<type input="checkbox" name="topRated"'.$checked.'>';
于 2012-10-23T17:39:48.170 回答
0

因此,您可以设置位置,但您需要页面根据过滤器更改复选框。这样,您就不需要保存 cookie。

 $(document).ready(function () {
        var topRated = new RegExp("[?|&]filter=topRated");
        $('.js-bbCheckbox').prop('checked', function () {
            var filter = window.location.search.match(topRated);
            return filter != null;
        }).change(function () {
            window.location = $(this).is(':checked') ? '?filter=topRated' : window.location.toString().replace(topRated, "");
        });
    });
于 2012-10-23T17:57:49.540 回答