【问题标题】:Rails and coffeescript popup only working on first object in arrayRails 和 coffeescript 弹出窗口仅适用于数组中的第一个对象
【发布时间】:2013-03-20 10:17:22
【问题描述】:

我有一个产品页面,列出了几种不同的产品。当点击产品主图片时,我希望弹出/灯箱显示该产品的另一张图片和其他信息。

但是,点击事件仅适用于第一个产品:

$(document).ready ->
 i = $(".main-image").attr("data-productid")
 button = $("#single_" + i)
 button.on "click", ->
  $("#product_popup").show()

html/erb:

<% products.each do |product| %>
<% if product.on_display? %>
  <div class="grid_1">
  <li id="product_<%= product.id %>" class="columns product three <%= cycle("alpha", "secondary", "", "omega secondary", :name => "classes") %>" data-hook="products_list_item" itemscope itemtype="http://schema.org/Product">
    <div class="main-image" id="single_<%= product.id %>" data-productid="<%= product.id %>">
      <%= large_image(product, :itemprop => "image", :class => "product-image", :id => product.id) %>
    </div><!-- main-image-->
    <%# ******LIGHTBOX******* %>
    <div id="product_popup">
        <%= large_image(product, :itemprop => "image", :class => "product-image") %>
    </div><!-- product_popup -->

感谢您的帮助。我很感激。

【问题讨论】:

    标签: javascript ruby-on-rails coffeescript


    【解决方案1】:

    试试这个

    jQuery ->
      $(".main-image").each () ->
        i = $(this).attr("data-productid")
        $("#single_" + i).on "click", ->
          $("#product_popup").show()
    

    您需要在您的 .main-image 选择器上调用 each,因此每个内部的代码都会执行到您的每个 div.main-image。请注意 each 中的 $(this),在 each 循环的每次迭代期间,这将与您的每个 div 相关。

    我觉得你可以像这样重构(首先尝试上面的解决方案以确认它有效)

    jQuery ->
      $("div.main-image").on "click", ->
        $("div#product_popup").show()
    

    【讨论】:

    • 这绝对让我更近了一步。现在所有产品都可以点击并弹出产品弹出 div,但每个产品在点击时都会显示第一个产品图像,而不是被点击产品的图像。有任何想法吗?感谢您的帮助!
    • 是的,如果您在我的回答中使用第一段代码,请将$("#product_popup").show() 替换为$("li#product_" + i + " #product_popup").show()
    • 试过了,它适用于第一个产品,但是当我点击其他产品时没有任何反应。这是我的咖啡脚本:jQuery -&gt; $(".main-image").each () -&gt; i = $(this).attr("data-productid") $("#single_" + i).on "click", -&gt; $("li#product_" + i + " #product_popup").show()
    • 嘿jtrinker,别忘了奖励答案,这就是它的工作方式
    • 我在等待回复。不过我想通了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多