Javascript 即使在jQuery脚本中执行element.preventDefault()之后,锚定标记也会跟随url

Javascript 即使在jQuery脚本中执行element.preventDefault()之后,锚定标记也会跟随url,javascript,jquery,html,ruby-on-rails,activerecord,Javascript,Jquery,Html,Ruby On Rails,Activerecord,我试图用jQuery删除一个元素。一切正常,但出于一些奇怪的原因,即使在脚本中执行了element.preventDefault()之后,锚定标记在删除目标后跟随href,并给出ActiveRecord::RecordNotFound错误。我知道该记录已被删除,所以在尝试打开该页面后,它会给出ActiveRecord::RecordNotFound错误。但我不明白我还能做些什么来阻止它访问任何页面 <% if current_user == @habit.user %> <

我试图用jQuery删除一个元素。一切正常,但出于一些奇怪的原因,即使在脚本中执行了element.preventDefault()之后,锚定标记在删除目标后跟随href,并给出ActiveRecord::RecordNotFound错误。我知道该记录已被删除,所以在尝试打开该页面后,它会给出ActiveRecord::RecordNotFound错误。但我不明白我还能做些什么来阻止它访问任何页面

<% if current_user == @habit.user %>
  <% habit_id = @habit.id %>
  <% goal_id = goal.id %>
  <a href="/habits/<%= habit_id %>/goals/<%= goal_id %>" data-confirm="Destroy <%= goal.name %>?" data-method="delete" class="jquery-postback" rel="nofollow">Delete Goal</a>
<% end %>



<script>
$(function() {
$(".jquery-postback").on('click', function(element) {
    element.preventDefault();

    var $this = $(this);

    $.post({
        type: $this.data('method'),
        url: $this.attr('href')
    }).success(function (data) {
        alert('success');
    });
    });
});
</script>

$(函数(){
$(“.jquery postback”)。在('click',函数(元素){
元素。preventDefault();
var$this=$(this);
美元邮政({
类型:$this.data('method'),
url:$this.attr('href')
}).成功(功能(数据){
警惕(“成功”);
});
});
});
我试着玩了很多脚本和锚标签,但找不到任何解决方案。有没有解决这个错误的建议


ps:此功能允许用户从“习惯显示”页面中删除目标。

您可以使用
指针事件:无创建一个类,用于禁用链接:

.disable-link{
    pointer-events: none;
}
并将此类应用于元素。

只需执行以下操作:

$("a.jquery-postback").on('click', function(element) {
  element.preventDefault();
  ...
}

不知道为什么,但您需要专门针对
.preventDefault()
链接标记来工作。

我终于找到了解决方案。如果其他人也有同样的问题,如果您在不使用data method=“delete”和rel=“nofollow”的情况下重写锚定标记,那么它将起作用

像这样的

<a href="/habits/<%= habit_id %>/goals/<%= goal_id %>" data-confirm="Destroy <%= goal.name %>?" class="jquery-postback" >Delete Goal</a>

背后的原因是,Rails附带了一些帮助程序,为Rails生成的所有“删除”操作创建事件处理程序。这是Rails使用的JQuery代码:


因此,如果锚定标记没有数据远程和数据方法,则事件处理程序将是唯一执行的处理程序。

尝试将单击事件侦听器包装在DOMContentLoaded回调
文档中。addEventListener('DOMContentLoaded',function(event){$('.jquery postback')。on('click',function(element){…})
。非常感谢@SebastiánPalma,尝试过这个,它不会转移注意力,但不会通过jQuery删除。它正在使用rails。我可以看到页面刷新。还有其他建议吗?非常感谢@archana的建议。但在添加此链接后,删除链接有点像纯文本,无法执行任何操作。还有其他解决此问题的建议吗?单击链接后,您希望如何查看该链接?感谢您的时间Archana,单击链接后,我希望它从数据库中删除目标。但是该链接会发生什么情况?点击后,它的外观或行为应该如何?嘿,Archana,点击一次后,链接应该完全消失。谢谢你的帮助。