Javascript 当我单击“切换”时,切换返回到以前的状态;否";在警报提示中

Javascript 当我单击“切换”时,切换返回到以前的状态;否";在警报提示中,javascript,jquery,html,Javascript,Jquery,Html,我创建了一个开关切换,允许系统管理员激活/停用帐户的登录访问 管理员单击开关切换(开关从状态1移动到0)后,将通过警报框提示确认(是否要激活/停用此帐户?是|否),每当我单击“否”,我都希望它返回到以前的状态(从0到1) 如果状态为“1”[帐户已激活],我可以成功地执行此操作,但如果状态相反,从状态0变为1,则开关切换不会返回到以前的状态,并且会卡在状态1 它仍然发送正确的POST命令tho(例如,如果帐户被激活,则将其停用,反之亦然),但视觉显示是错误的 这是我的密码 切换开关的Javascr

我创建了一个开关切换,允许系统管理员激活/停用帐户的登录访问

管理员单击开关切换(开关从状态1移动到0)后,将通过警报框提示确认(是否要激活/停用此帐户?是|否),每当我单击“否”,我都希望它返回到以前的状态(从0到1)

如果状态为“1”[帐户已激活],我可以成功地执行此操作,但如果状态相反,从状态0变为1,则开关切换不会返回到以前的状态,并且会卡在状态1

它仍然发送正确的POST命令tho(例如,如果帐户被激活,则将其停用,反之亦然),但视觉显示是错误的

这是我的密码

切换开关的Javascript


var-chk;
$(文档).on('change','btn change status',函数(e){
e、 预防默认值();
chk=$(本);
变量开关状态=$(this.attr('data-status');
var账户状态=(开关状态==1)?0:1;
var id=$(this.attr('data-id');
var confirm_alert=(开关_status==1)?confirm(“您确定要停用此帐户吗?”):confirm(“您确定要激活此帐户吗?”);
如果(确认警报==真){
$.ajax({
url:“/user/updatestatus”,
类型:“POST”,
数据:{
_令牌:{{csrf_token()}}},
id:id,
状态:帐户状态
},
成功:功能(数据){
如果(data.success==true){
警报(“帐户已成功更新!”);
location.reload();
}
}
});
}
否则{
如果(已检查){
chk.道具(“已检查”,错误);
}
否则{
chk.道具(“已检查”,正确);
}
}
});
EDIT:添加了开关的HTML部分,尽管它仍然在javascript中,因为我将它附加到了一个dataTable

数据表的HTML格式


账户管理
添加帐户
身份证件
用户名
电子邮件
角色
创建日期
行动
身份证件
用户名
电子邮件
角色
创建日期
行动
数据表的Javascript


$(文档).ready(函数(){
getRoles();
风险值账户;
$(“#帐户管理”).addClass(“活动”);
账户=$(“#表账户”).DataTable({
阿贾克斯:{
url:“/users/get all users”,
dataSrc:'
},
回答:是的,
“订单”:[[7,“说明”],
栏目:[
{data:'id'},
{数据:'用户名'},
{数据:'电子邮件'},
{data:'role.id'},
{数据:'在'}创建_,
{数据:空,
呈现:函数(数据、类型、行){
var html=“”;
如果(data.status==1){
html+='';
}否则{
html+='';
}
html+=“编辑”;
html+=“”;
//编辑
//html+=“删除”;
返回html;
} 
},
],
columnDefs:[
{className:“隐藏”,“目标”:[0]},
{“orderable”:false,“targets”:4}
]
});

谢谢!

我不确定问题中描述的情况,请您用HTML更新您的帖子,好吗。我知道代码不起作用的原因,但需要查看HTML以进一步调查。事后看来,我意识到我的解决方案可能无法解决问题。

如果类为
btn change status
的元素是HTML中的
标记,那么jQuery的
.on(“change”,handler)
将不起作用(其中
handler
是您的函数)。根据jQuery文档:

当元素的值更改时,
change
事件被发送到元素。此事件仅限于
元素、
框和
元素

相反,我建议使用以下方法之一:

  • .on(“单击”,处理程序)
  • .on(“mouseup”,handler)
  • .on(“mousedown”,handler)

看看哪一个有效。

你能用你的HTML更新你的帖子吗,因为我不确定问题中描述的情况。我知道为什么代码不起作用,但需要查看HTML以进一步调查。事后来看,我意识到我的解决方案可能无法解决问题。

如果类为
btn change status
的元素是HTML中的
标记,那么jQuery的
.on(“change”,handler)
将不起作用(其中
handler
是您的函数)。根据jQuery文档:

当元素的值更改时,
change
事件被发送到元素。此事件仅限于
元素、
框和
元素

相反,我建议使用以下方法之一:

  • .on(“单击”,处理程序)chk = $(this);
    
    chk.prop('checked')
    
    chk[0].checked
    
     $(document).on('change', '.btn-change-status', function(e) {
      e.preventDefault();
      var chk = $(this);
      var switch_status = $(this).attr('data-status');
      var account_status = (switch_status == 1) ? 0 : 1;
      var id  = $(this).attr('data-id');
      popUpConfirmation(id, status);
    });
    
    function popUpConfirmation(id,status) {
       //popup opens here is visible 
       $("#ok-button").data("id", id);
        $("#ok-button").data("status", status);
    }
    
    $("#ok-button").on('click', function() {
      var id  = $(this).attr('data-id');
      var status = $(this).attr('data-status');
    
      var checkbox = $("input[data-id='"+id+"']");
      if(checkbox.prop('checked')) {
         checkbox.prop('checked',false);
      } else {
         checkbox.prop('checked',true);
      }
    
       $.ajax({
              url: "/user/update-status",
              type: "POST",
              data: {
                _token: "{{csrf_token()}}",
                id: id,
                status: account_status
              },
              success: function(data) {
                if (data.success === true) {
                  alert("Account Successfully Updated!");
                  location.reload();
                }
              }
    
            });
    
    });
    
    $("#cancel-button").on('click', function() {
      //close or hide the popup
    });
    
    <div class="popup">
      <input type="button" id="ok-button"></input>
       <input type="button" id="cancel-button"></input>
    </div>
    
    $('.status').data('id') // Returns the value of `data-id` on each `input.status`