我试图找出是否可以使用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 /帖子,我的结果将被返回
现在当我在移动视图中使用select值时,返回的params与get请求相同,不同之处在于地址栏中的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的控制器,但这也不起作用,虽然我认为我做同样的事情,只是以不同的方式
答案 0 :(得分:2)
我假设请求是一个没有formdata的GET,你只使用select输入来选择一个url,但你想要的行为好像所选的url被'clicked': 使用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);
}
答案 1 :(得分: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);
}
更改修改了函数名称和变量url。
现在回答你的第二个问题,你可以在你的帖子中找到类似的东西#index action:
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 %>
答案 2 :(得分:1)
您需要:onclick =&gt;“some_function()”而不是:remote =&gt; true.Then将id放在链接上并在application.js中获取链接并获取您要提交的表单并发送表格。
<强>更新强>
在application.rb中试试这个:
jQuery(function($) {
somemethod();
});
function somemethod(){
jQuery("#id_of_the_option").bind("click", function() {
//do something with the content
});
}