3

我想在 Rails 中调用 Ajax 调用。:remote我已经看到了使用该选项的好方法。我有这个工作示例:

<%= button_to('Get Transfers', {:action => 'get_transfers', :section_id => params[:section_id]}, :method => :get, :remote => true) %>

但是,我不希望用户通过按下按钮或单击链接来调用调用,而是在 Javascript 事件上调用它(悬停在元素上)。

有没有办法使用:remote => true,但在悬停在元素上时会自动调用它?如果是,如何?

4

1 回答 1

2

选项1

要使按钮响应单击并将鼠标悬停在其他 div 上,您可以尝试执行以下操作:

在您的视图中,您为按钮提供了一个唯一的 id,并向应该充当触发器的元素添加了一些类:

<%= button_to('Get Transfers', {action: 'get_transfers', section_id: params[:section_id]}, method: :get, remote: true}, {id: 'remote_hover_button'}) %>
<div class="some_trigger">Hover me!</div>

在您的 js 中,您希望绑定到该触发元素并触发按钮上的单击事件:

$(document).ready(function(){
  $('.some_trigger').hover(function(){
    $('#remote_hover_button').trigger('click');
  });
});

选项 2

通过创建悬停的 div 手动编写 ajax 并为其提供要调用的 url:

<div class="some_trigger" data-url="<%= url_for(action: 'get_transfers', section_id: params[:section_id]) %>">Hover me!</div>

绑定到 div 并进行 ajax 调用:

$(document).ready(function(){
  $('.some_trigger').hover(function(){
    $.ajax($(this).data('url'));
  });
});

这实际上只会触发操作,而不会对响应执行任何操作。您可以使用以下方式绑定到结果:

$(document).ready(function(){
  $('.some_trigger').hover(function(){
    $.ajax($(this).data('url'))
      .done(function() { alert("success"); })
      .fail(function() { alert("error"); })
      .always(function() { alert("complete"); });
  });
});

有关 ajax 函数的更多信息,请查看文档

于 2013-03-13T10:03:25.573 回答