我正在创建一个订阅/取消订阅复选框,在注册时,默认会订阅用户。如果用户取消选中(取消订阅)复选框,它将在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'>×</button></div>");
},
error: function(xhr, ajaxOptions, thrownError) {
alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
}
});
}
问题
在第一页加载时,页面从控制器获取newsletter_value
并显示相应的复选框,但是一旦用户单击它并同时再次单击,相同的功能将像第一次单击一样工作(不在功能中切换)。
希望你理解。并感谢您的帮助。
答案 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'>×</button></div>");
$('#checkbox').attr("onclick","update_newsletter(1);");
},
// ...
});
更改onclick
功能的方法来自this post。