メッセージの件名の表があり、各 tr をクリックしてメッセージの詳細ページに移動できるようにしました。ただし、ユーザーがクリックして $.ajax を介して削除するメッセージをマークできるゴミ箱アイコンもあります。これは、最初に tr イベント ハンドラーを「オフ」にすることによって行われます。問題は、tr クリック イベント ハンドラーを元に戻すと、クリックが処理され、ユーザーが詳細ページに移動することです。
e.stopPropogation(); を追加しようとしました。$.ajax 呼び出しの直後で、tr の "on" 設定の前ですが、イベントがオンになるのを防ぎます。後に追加しても、目的の動作が妨げられることはありません。
したがって、私の質問は、クリックイベントをオフにした後、tr のクリックイベントを「オン」に戻す方法ですが、その過程でイベントをオフにしないようにする方法です。
コード:
$("#messageTable tbody tr").on("click", function () {
var id = $(this).find('td:first').find('input').val();
window.location.replace('/Messages/Read/'+id);
});
$('.icon-trash').on("click", function (e) {
// turn off tr click to prevent navigation
$("#messageTable tbody tr").off("click");
// grab the message Id from the hidden input
var messageId = $(this).parent().find('input').val();
var tr = $(this).parent().parent();
var request = $.ajax({
url: "MarkMessageForDeletion"
, type: "GET"
, data: { id: messageId }
, dataType: "json"
, async: true
, success: function (data) {
if (data === "1") {
tr.remove();
}
}
});
// turn click back on
$("#messageTable tbody tr").on("click", function () {
var id = $(this).find('td:first').find('input').val();
window.location.replace('/Messages/Read/' + id);
});
});