Rails链接到忽略e.preventDefault();从jQuery调用,因为方法::get已设置

Rails link_to ignoring e.preventDefault(); from a jQuery call because method: :get is set

本文关键字:调用 jQuery 因为 方法 get 设置 链接 preventDefault Rails      更新时间:2023-09-26

通过实验,我了解到以下代码:

        <td><%= link_to 'Notify', '/w/'+w.id+'/notify', method: :get, :class => "btn btn-success notify-btn" %></td>

无论此jQuery:如何都会激发

  $('.notify-btn').click(function(e){
    e.preventDefault();
    bootbox.confirm("Alert?", function(result){
      if(result === true){
        return true;
      } else {
        return false;
      }
    });
  });

这是由于方法::get。我一个接一个地删除了链接的元素,并尝试了各种组合。如果方法::get在那里,它就会着火。

我可以用e.stopPropagation阻止它,但它根本不会跟随链接。即使我单击"确定",它也只是坐在页面上无所事事。

如果我去掉erb并使用像这样的直接HTML:

<a href="/w/53531e8a963e6503c60002b2/notify" class="btn btn-success notify-btn" data-method="get">Notify</a>

数据方法="get"在那里,结果相同。如果我删除数据方法,它会弹出警报并阻止跟踪链接,但即使我确认了,它也不会真正触发链接。

你知道我做错了什么吗?

  $('.notify-btn').click(function(e){
    e.preventDefault();
    e.stopPropagation();
    var link = $(this).attr('href')
    bootbox.confirm("Alert?", function(result){
      if(result){
        window.location = link;
        return true;
      } else {
        return false;
      }
    });
  });

我不得不使用一些诡计,但上面的办法奏效了。

奇怪的是,它最终同时需要preventDefault和stopPropagation。我尝试了所有可能的组合。

我在试图控制是否应根据某些条件执行link_to请求时也遇到了同样的问题,最终执行了以下

  1. 使用get或post方法创建隐藏的链接按钮
  2. 创建可见链接按钮(_T)
  3. 如果条件为true,则单击可见链接按钮时,将触发隐藏链接按钮
  4. 如果条件为false,则当单击可见的link_to按钮时,只需返回false即可完成任务

例如假设类。链接到和。使用方法链接到

$('.link-to').click(function(){
  if(condition){
    $('.link-to-get-method').trigger('click');
    return true;
   }else{
    return false;
   }
});