【问题标题】:how to have onchange in collection_select with jquery如何使用 jquery 在 collection_select 中进行 onchange
【发布时间】:2010-02-14 03:06:22
【问题描述】:

我在我的 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来完成吗?

【问题讨论】:

    标签: jquery ruby-on-rails prototypejs


    【解决方案1】:

    是的,remote_function 需要包含原型库。可以使用 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);
    

    【讨论】:

    • 我这样做没有冲突。但我的 jquery ui 选项卡不起作用。 pastie.org/824022
    • 您的文档就绪调用不正确,并且它的重要 jquery 包含在 默认值之后。这就是它的外观(或类似的东西):pastie.org/824043
    【解决方案2】:

    默认情况下,rails 配置或包含使用原型而不是 jquery,代码&lt;%= javascript_include_tag :defaults %&gt; 在运行时将原型脚本包含到您的 html 中。有一些 Rails 插件,例如 jRails,可以让 jQuery 与 rails 一起使用,但它还没有与 rails 无缝集成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多