类不在DOM中更新,处理程序工作不正常

问题描述:

所以,我不确定这是否是正确的方法,但我听说使用内联onclick处理程序而不是jQuery处理程序不是一个好主意。类不在DOM中更新,处理程序工作不正常

我有一个用户的仪表板,用一个按钮来阻止/取消阻止用户。下面是我使用的阻止他们的办法:我有一个类似的功能

<script> 
    $('.fa-unlock-alt').parent().on('click', function() { 
     var $button = $(this) 
     var id = $button.attr('id').slice(12); 
     console.log($(this)); 


     $.ajax({ 
      method: 'POST', 
      url: '/Websites/TimeTracking/Resources/PHP/Users/blockUser.php', 
      data: {idUser: id, status: 'Inactivo'}, 
      success: function (result) { 
       if (result == "Exito") { 
        alert("El acceso del usuario ha sido bloqueado!"); 
        $button.find('i').toggleClass('fa-unlock-alt fa-lock'); 
        $button.removeClass('btn-outline-success').addClass('btn-outline-danger'); 
       } 
       console.log(result); 
      }, 
      error: function (exception) { 
       alert("No se pudo bloquear el acceso!"); 
       console.log(exception); 
      } 
     }) 
    }) 
</script> 

,但它看起来对.fa-lock,而不是fa-unlock-alt,它类似的行动,而是改为解开锁定。

DOM加载完成后,第一次单击该按钮时它可以正常工作,ajax调用已成功完成,我的数据库也会相应地更新,并且按照设想更改类,但每当我尝试再次单击它时,它将无法工作。

一个快速调试表明,即使浏览器显示我想要的颜色和形状,DOM实际上已经在元素的属性上注册了默认值。

我应该采取不同的方法吗?

谢谢!

+0

我建议你使用(最接近的)[https://api.jquery.com/closest/]而不是父母,但..如何?很容易,放一个类或者只是搜索父标签名,你就可以确定你正在听正确的标签。顺便问一下,可以问你是否使用''ready''函数? –

+0

不使用'ready'功能。我应该在哪里? –

+0

如果您单击按钮来锁定用户,为什么要再次单击它。你是否重新锁定somoene? – chiliNUT

也许你应该在父元素(delegate)上注册点击处理程序。像

$('.parent-element-selector-here').on('click', '.fa-unlock-alt, .fa-lock', function() { 

    var $button = $(this); 

    if ($button.hasClass('fa-unlock-alt')) { 

     // do this 

    } else { 

     // do that 

    } 

}); 
+0

让我试试吧,我会很快给你提供反馈。 –

+0

我完全是这样想的,但它甚至不会识别按钮上的点击 –

+0

有些东西并不完全像这样,它在工作:https://jsfiddle.net/57uuxfyc/ –