我从下拉菜单中获取两个值来制作自定义网址时遇到一些问题。 我正在尝试使用jquery。这两个值的ID为
#convertor_from_currency
#convertor_to_currency
<script>
$(document).ready(function(){
$("#currency_form").submit(function(e){
e.preventDefault();
var from = $('#convertor_from_currency').val();
var to = $('#convertor_to_currency').val();
var url_end = from + "-" + to;
var url = $('#currency_form').attr('action') + '/' + url_end;
$('#currency_form').attr('action', url);
$('#currency_form').submit();
//alert(url);
});
</script>
<%= form_for :convertor , :html => {:id => "currency_form"}, :url => {:controller => "converter", :action => "show" } do |f| %>
<%= f.label :from_currency %>
<%= f.select :from_currency, options_for_select(currencies, @from_cur) %>
<%= f.label :to_currency %>
<%= f.select :to_currency, options_for_select(currencies, @to_cur), :required => true %>
<%= f.submit "Calculate", class: "btn btn-large btn-primary", id: "submitButton" %>
<% end %>
root 'converter#index'
# get "converter/show"
match '/currencies/', to: 'converter#show', via: [:post]
提交时我希望网址为:
'/currencies/url_end
其中“url_end”是表单中提交的值的串联:
#convertor_from_currency
#convertor_to_currency
class ConverterController < ApplicationController
def index
end
def show
@amount = params[:convertor][:amount]
@from_cur = params[:convertor][:from_currency]
@to_cur = params[:convertor][:to_currency]
@result = ConverterHelper.show(@from_cur, @to_cur, @amount)
end
end
我该怎么做? 任何想法将被赞赏,即使它使用除jquery / javascript以外的其他方式
答案 0 :(得分:1)
您可以尝试重写此路线:
match '/currencies/', to: 'converter#show', via: [:post]
为:
match '/currencies/:from-:to', to: 'converter#show', via: [:post]
在这种情况下,对(例如)/ currency / usd-eur的请求将被路由到转换器#show,您将能够使用params [from]和params [:to]访问控制器操作中的货币。
<强>更新强>
此代码应该按预期工作:
<script>
$(document).ready(function(){
$("#currency_form").submit(function(e){
var from = $('#convertor_from_currency').val();
var to = $('#convertor_to_currency').val();
var url_end = from + "-" + to;
var url = $('#currency_form').attr('action') + '/' + url_end;
$.post(url, $('#currency_form').serialize(), function(data){alert('success');});
alert(url);
e.preventDefault();
return false;
});
});
</script>
只要您在提交处理程序内,就不应该在表单上调用submit。相反,您应该使用$ .post(...)来提交表单数据。表格数据可以像我的例子一样被序列化,以便与$ .post()一起发送。你应该添加“});”在关闭标签之前。
适用于您的路由配置之一:
匹配'/--币/'=&gt; 'converter #index',如:转换器 匹配'/--币/:from-:到'=&gt; '转换器#show',来自:[:post]
您的表单应使用converter_path帮助程序作为操作URL。 JS代码应该将表单提交到/ currency /:from-:to。
您需要将视图中的表单更新为:
{:id =&gt; “currency_form”},:url =&gt; converter_path do | f | %GT;您可以在控制器中使用此示例代码,以确保正确提交表单:
def show @amount = params [:convertor] [:amount] @from_cur = params [:convertor] [:from_currency] @to_cur = params [:convertor] [:to_currency]#@ result = ConverterHelper.show(@ from_cur,@ to_cur,@ amount) 渲染文字:“文字” 端
一旦看到表单在服务器上正确处理,您就可以取消注释该行并删除渲染。
答案 1 :(得分:1)
这可以帮助(它对我有用)
<script>
$(document).ready(function(e){
$("#currency_form").submit(function(){
var from = $('#convertor_from_currency').val();
var to = $('#convertor_to_currency').val();
var url_end = from + "-" + to;
var url = $('#currency_form').attr('action') + '/' + url_end;
$('form#currency_form').attr('action', url);
// window.location.href = url
e.preventDefault();
alert(url);
return false;
});
});
</script>
您可以(取消)发表评论,使其按照您的问题运作
不要忘记你的路线
root 'converter#index'
match '/currencies/', to: 'converter#show', via: [:post]
post '/currencies/:url' => 'converter#show'
然后upvote !!!!