これは適切なアプローチであるかどうかは不明ですが、jqueryハンドラとは対照的にインラインonclick
ハンドラを使用することは良い考えではありません。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-unlock-alt
の.fa-lock
のために、それは同様の作用をするように見えますが、ロックの代わりにロックを解除します。
DOMがロードされると、初めてボタンをクリックしたときに正しく動作し、Ajax呼び出しが正常に行われ、データベースが更新され、クラスが想定通りに変更されますが、再度クリックしようとすると動作しません。
簡単なデバッグでは、ブラウザが色と形を表示していても、DOMは実際に要素のプロパティに登録された既定値を持っています。
私は取るべき別のアプローチがありますか?
ありがとうございます!
親の代わりに(最寄りの)[https://api.jquery.com/closest/]を使用することをお勧めします。簡単に、クラスを入れたり、親タグ名を検索すれば、正しいタグを聴いていることを確認できます。 ところで、 '' ready''関数を使っているかどうか尋ねることがありますか? –
'ready'関数を使用していません。正確にどこにすべきですか? –
ボタンをクリックしてユーザーをロックすると、再びそのボタンをクリックします。あなたはsomoeneをre-lockingしていますか? – chiliNUT