我在我的html页面上使用jquery,并希望在collection_select上有一个onchange事件。
如果我添加<%= javascript_include_tag :defaults %>
,那么我的jquery代码不起作用。
基本上我有一个collection_select如下:
<%=collection_select(:product, 'prod_name', @prods, :id, :prod_name,
{:prompt => 'Select Product'},{:onchange => remote_function(:url =>
{:action => 'volume_or_quant'}, :with => "'id=' + this.value")})%>
然后我有一个选择标记和一个文本字段:
<%=select_tag :volume, options_for_select(["", "1/8 lb", "1/4 lb", "Single",
"Multi 5" ], "N/A") %>
<%= text_field_tag :quantity, "", :size=>"4"%>
当从collection_select
中选择一个选项时,我想回到我的操作并检查它是否在数据库中有音量或单位。基于此,将启用上述选择框/文本框。
现在我的行动看起来像:
def volume_or_quant
@product = Product.find(params[:id])
puts "Value: " + @product.volume
end
然而,当我选择一些东西时......没有任何反应。现在我没有默认的javascripts。
我正在尝试做什么需要默认原型javascript?或者可以用jquery完成吗?
答案 0 :(得分:3)
是的,remote_function
要求包含Prototype库。它可以使用jQuery完成,但不能在尝试时使用remote_function
帮助程序。
让jQuery正常工作:
包含默认值时出现的问题是Prototype尝试使用$
,jQuery也是如此。您可以使用jQuery的noConflict
模式来解决此问题。
包括您最初尝试过的默认值,但请遵循此建议以使jQuery再次运行:
您可以做一些事情,但是如果您使用jQuery的本地副本,请将其添加为最后一行(并在javascript_include_tag
调用中的默认值之后包含jQuery):
jQuery.noConflict();
如果您使用的是Google CDN,请执行以下操作:
<%= javascript_include_tag :defaults, "http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js" %>
<script type="text/javascript"> jQuery.noConflict() </script>
然后,确保所有jQuery代码都包含这个(对于过去住在document.ready
的任何代码:
// $ = Prototype
jQuery(document).ready(function($){
// $ = jQuery
});
// or shorthand:
jQuery(function($){
// $ = jQuery
});
或者只是使用它(创建一个私有范围,其中$ = jQuery):
// $ = Prototype
(function($){
// $ = jQuery
})(jQuery);
答案 1 :(得分:0)
默认情况下,rails配置或包含使用原型而不使用jquery,代码<%= javascript_include_tag :defaults %>
包括运行时html的原型脚本。像jRails
这样的rails有一些插件可以使用rails启用jQuery,但它还没有与rails无缝集成。