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

これはすべて正常に機能し、URLはlocalhost:3000 / postsのままで、結果が返されます

選択値を使用してモバイルビューを表示している場合、返されるパラメータは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のコントローラーと一致するようにコントローラーを変更しようとしましたが、それも機能しませんでしたが、同じことを別の方法で行っていると思います。

4

3 に答える 3

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 を変更しました。

2 番目の質問に答えるには、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

index.js.erb次のような内容で、views/posts ディレクトリの下に新しいファイルを追加します。

<% 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 に答える
2

リクエストはフォームデータのないGETであると仮定します.select入力を使用して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 に答える
1

:remote => trueの代わりに:onclick => "some_function()"が必要です。次に、リンクのput idとapplication.jsでリンクを取得し、送信するフォームを取得してフォームを送信します。

アップデート

application.rbでこれを試してください:

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

関数somemethod(){

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

}

于 2013-02-15T12:56:17.413 に答える