【问题标题】:Show checkbox dynamically动态显示复选框
【发布时间】:2018-11-12 20:14:19
【问题描述】:

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

我的尝试

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 并显示相应的复选框,但是一旦用户单击它并同时再次单击,相同的功能将与第一次单击时一样工作(功能没有切换)。

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

【问题讨论】:

  • confirm() 只会在用户退订时运行。

标签: javascript php jquery ajax checkbox


【解决方案1】:

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

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

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

【讨论】:

  • 终于...找到了解决方案...谢谢先生。
猜你喜欢
  • 2017-08-02
  • 2016-10-30
  • 2016-06-18
  • 2013-02-06
  • 2013-04-26
  • 1970-01-01
  • 2019-11-23
  • 2015-11-28
相关资源
最近更新 更多