私の質問は、jQueryを使用してリンク/クリックイベントを無効にすることに関するものであり、おそらく私が思っているよりも簡単です。簡単にするために重要なコードにコメントしました。
.jsファイルに次のコードがあります。
$('.delete-answer').click(function(event) {
event.preventDefault();
// some actions modifying the tags
$('.output').closest('li').remove();
var idMsg = ...;
var action = ...;
var answers = ...;
$(this).closest('li').children('p').remove();
$(this).closest('.tr').before('<tr><td><div class="output">Deleting message...</div></td></tr>');
$(this).closest('.tr').remove();
// While the servlet is deleting the message, I want to disable the links
// but I can't, so my problem is just here
// METHOD 1
//$('a').unbind('click');
// METHOD 2
//$('a').bind('click', function(e){
// e.preventDefault();
//});
$.post("../app/ForumCampus", {action:action, idMsg:idMsg}, function(data) {
});
// METHOD 1
//$('a').bind('click');
// METHOD 2
//$('a').unbind('click');
$('.output').empty();
$('.output').append('Message deleted successfully.');
});
そして私のHTMLには、次のようなリスト項目があります。
<li>
<p class="text">Some text.</p>
<table class="answer-details" style="width: 100%">
<tbody>
<tr class="tr">
<td style="width: 50%;">
<div class="msg-modification" display="inline" align="right">
<a id="modify" class="delete-answer" href="#">Delete</a>
</div>
</td>
</tr>
</tbody>
</table>
</li>
ご覧のとおり、クリックイベントを無効にする方法を2つ試しました。
方法1:次の方法を試しました:jqueryを使用してすべてのイベントのバインドを解除する方法
結果:これは機能し、delete-answerクラスを使用してアンカーからクリックイベントのバインドを解除しますが、次のようになります。
1)delete-answerクラスでのみアンカーを非アクティブ化します。サーブレットが処理を実行している間は、すべてのリンクを無効にすることをお勧めします。
2)リンクを再度有効にすることができません(または方法がわかりません)。
方法2:次の方法を試しました:jQueryでリンクを動的に有効/無効にするにはどうすればよいですか?
結果:通常のアンカーでは機能しますが、クラスdelete-answerのアンカーでは機能しません。
どちらも互換性がないようですので、助けていただければ幸いです。
注:これを行ってクラスを変更しようとしました:$('.delete-answer').addClass('delete-disabled').removeClass('delete-answer');
クラスを変更し、delete-disabledクラスのみでアンカーを残しますが、もう一度クリックすると、メッセージが削除されたままで、理由がわかりません:/