0

我正在尝试找出是否可以使用 link_to 在选项值标记中执行 Ajax 请求

<option value="<%= link_to 'Manage Sandpiper Posts', posts_path(:type => 'Sandpiper'), :remote => true %>">Sandpiper</option>

因为选项值标签只接受文本,所以输出目前无效,链接显然不起作用

我想要实现的是在选择选项后执行请求

有谁知道如何解决这个问题,或者如果可能的话,正确的语法是什么?

编辑

当视口处于桌面大小并且工作正常时,我已经从下拉菜单中发出了这个 Ajax 请求,我通过

<%= link_to 'Sandpiper', posts_path(:type => 'Sandpiper'), :remote => true %>

Firebug 返回参数

type = sandpiper

GET 请求是

GET posts?type=Sandpiper

这一切正常,网址保持为 localhost:3000/posts 并返回我的结果

现在,当我在移动视图中使用选择值时,返回的参数与获取请求相同,不同之处在于地址栏中的 url 转到

http://localhost:3000/posts?type=Sandpiper

并且没有返回结果。

控制器

def index
@posts = Post.all
@tynewyddpost = Post.tynewydd_posts
@woodsidepost = Post.woodside_posts
@sandpiperpost = Post.sandpiper_posts
@outreachpost = Post.outreach_posts
@companypost = Post.company_posts
@staffpost = Post.staff_posts

结尾

index.js.erb

<% if params[:type] == 'Tynewydd'  %>
$('#newsResults').html('<%= escape_javascript(render partial: 'tynewyddposts') %>');
<% end %>

<% if params[:type] == 'Woodside'  %>
$('#newsResults').html('<%= escape_javascript(render partial: 'woodsideposts') %>');
<% end %>

我确实尝试更改我的控制器以匹配@SybariteManoj 的控制器,但这也不起作用,尽管我认为我在做同样的事情,只是以不同的方式

4

3 回答 3

2

我假设请求是一个没有表单数据的 GET,你只使用选择输入来选择一个 url,但你希望行为就像选择的 url 被“点击”一样:使用 jquery:

<select onchange="follow_link(this)">
<option value="<%= posts_path(:type => 'Sandpiper')%>">Sandpiper</option>
...
</select>

然后你的 onchange 函数:

follow_link = function() {
var url = $(this).val();
$.get(url);
}    
于 2013-02-15T13:33:48.443 回答
2

我试图编辑 Viktor 的答案,但在同行评审之前它是不可见的。所以我在这里添加更改。

<select onchange="follow_link(this)">
  <option value="<%= posts_path(:type => 'Sandpiper')%>">Sandpiper</option>
  <option value="<%= posts_path(:type => 'Outreach')%>">Outreach</option>
  <option value="<%= posts_path(:type => 'Tynewydd ')%>">Tynewydd </option>
  ...
</select>

更改将此作为参数传递给函数。并更改选项的值。

follow_link = function() {
  var url = $(this).val();
  $.get(url);
}

changes修改了函数名和变量 url。

现在回答你的第二个问题,你可以在你的 posts#index 操作中有这样的东西:

def index
  @type = params[:type]

  if @type.blank?
    @posts = Post.all
  else
    @posts = Post.where(:type => @type)
  end

  respond_to do |format|
    format.html
    format.js
  end
end

并在您的 views/posts 目录下添加一个新文件index.js.erb,其内容如下:

<% if @type == 'Sandpiper' %>
  $('#some_container_id').html("<%= escape_javascript(render 'some_partial')")
<% elsif @type == 'Outreach' %>
  $('#some_container_id').html("<%= escape_javascript(render 'some_other_partial')")
<% else %>
  so on...
<% end %>
于 2013-02-15T14:23:18.893 回答
1

您需要:onclick=>"some_function()" 而不是 :remote=>true。然后在链接上放置 id 并在 application.js 中获取链接并获取您要提交的表单并发送表单。

更新

在 application.rb 中试试这个:

 jQuery(function($) {
   somemethod();
  });

函数一些方法(){

jQuery("#id_of_the_option").bind("click", function() {
  //do something with the content
});

}

于 2013-02-15T12:56:17.413 回答