动态显示复选框

时间:2018-06-03 08:25:46

标签: javascript php jquery ajax checkbox

我正在创建一个订阅/取消订阅复选框,在注册时,默认会订阅用户。如果用户取消选中(取消订阅)复选框,它将在confirm() jquery函数中要求确认,如果它返回true,则ajax请求将更新数据库中的值,并切换复选框以在下次单击时运行subscribe函数(没有页面重新加载)。

MY TRY

PHP

<?php if($newsletter_value){ ?>
        <input id="checkbox" type="checkbox" name="checkbox" value="<?php echo $newsletter_value; ?>" onclick="unsubscribe();" checked>
        <span class="label-text"></span>
<? } else{ ?>
        <input id="checkbox" type="checkbox" name="checkbox" value="<?php echo $newsletter_value; ?>" onclick="update_newsletter(1);">
        <span class="label-text"></span>
<? } ?>

的JavaScript

function unsubscribe(){
    var c = confirm("Are you sure?");
    if(c){
            update_newsletter(0);
    }else{ $('#checkbox').prop('checked',true)}
}

function update_newsletter(newsletter){
    url = '/updateNewsletter&newsletter='+newsletter ;
    $.ajax({
        type: 'get',
        url: url,
        dataType: 'html',
        success: function() { 
            $('#success').append("<div class='alert alert-success'><i class='fa fa-check-circle'></i> You have successfully modified your subscription <button type='button' class='close' data-dismiss='alert'>&times;</button></div>");
        },
        error: function(xhr, ajaxOptions, thrownError) {
           alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
        }
    });
}

问题

在第一页加载时,页面从控制器获取newsletter_value并显示相应的复选框,但是一旦用户单击它并同时再次单击,相同的功能将像第一次单击一样工作(不在功能中切换)。

希望你理解。并感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我认为问题是你永远不会交换复选框的onclick功能。 因为正如您所述,页面未重新加载。这意味着PHP代码没有执行,并且函数保持不变(因为PHP在服务器端执行)。

这再次意味着您必须在AJAX请求的onclick回调函数中交换success函数。

<强>的JavaScript

// ...
$.ajax({
    // ...
    success: function() { 
        $('#success').append("<div class='alert alert-success'><i class='fa fa-check-circle'></i> You have successfully modified your subscription <button type='button' class='close' data-dismiss='alert'>&times;</button></div>");
        $('#checkbox').attr("onclick","update_newsletter(1);");
    },
    // ...
});

更改onclick功能的方法来自this post