Shopify- 获取属性形式 <select>

Posted

技术标签:

【中文标题】Shopify- 获取属性形式 <select>【英文标题】:Shopify- getting attribute form <select> 【发布时间】:2021-10-05 22:28:33 【问题描述】:

所以我有一个问题。我正在 Sopify 中开发一家商店,并且我有一个自定义部分,其中我有用于选择变体的选择器,并且旁边还显示了一个变体图像。我想要做的是,当我选择一个变体时,特色图像也会更改为所选变体的特色图像,但我不知道我应该如何获得它的属性。 这是我的代码:

  $('.upsell-variants__selector').click(function()
    var main_img = $(this).attr('data-variant');
    $('.product__upsell-image img').attr('src', main_img);
  );
    
              <div class="product__upsell-image">
                  <img src=" all_products[product_one].variants[0].featured_image.src | img_url: 'master' " data-src="" >
              </div>
              <div class="product__upsell-form">
                    
                
                  <form class="upsell__form" id="product-upsell" method="post" action="/cart/add" id="form-- upsell_prod1.id ">
                    <!-- Variant selector -->
                    <select  calss="upsell-variants" name="id">
                      % for variant in upsell_prod1.variants %
                      <option class="upsell-variants__selector" data-src="variant.featured_image.src | img_url: 'master'" data-variant=" variant.id " value=" variant.id "
                              % if variant == current_variant %selected="selected"% endif %
                              >
                         variant.title %comment% -  variant.price | money  %endcomment%% if variant.inventory_quantity <= 0 %- Sold Out%endif%
                      </option>
                      % endfor %
                    </select>
                    <div class="product__upsell-price"> all_products[product_one].variants[1].price | money </div>
                    <button type="submit" class="btn upsell-atc single-ajax-cart-btn-upsell" id="add-to-cart-button">Quick Add</button>
                  </form>

编辑: 找到了解决方案,这里是它的链接:https://jsfiddle.net/4a9uxwbL/24/

【问题讨论】:

试试var main_img = this.dataset.src;(一般是$(this).attr('data-src'),我猜图片的网址就是这个) 不幸的是它不起作用。我认为由于某种原因我什至无法选择选项?我不知道... 对我来说很好:jsfiddle.net/wcxLkonb/2 只需做一些基本的调试:console.log(this) 是一个开始 嗯,对我不起作用。我做错了什么? i.imgur.com/hXadWko.png 什么,你的意思是我的小提琴不适合你?您检查浏览器控制台是否有错误? 【参考方案1】:

如果你想处理选择元素值的变化,你可能想在这里使用$.change() 函数。它会将“更改”事件处理程序附加到您的 select 元素 - 这样您就可以将 URL 放在 value 属性中。

// JS
$( ".upsell-variants" )
  .change(function () 
    var str = "";
    $( "select option:selected" ).each(function() 
      console.log("Variant selected!:", this.value);
      $('.product__upsell-image img').attr('src', this.attr('data-variant');
    )
  )

// html
// I fixed the spelling in "class" here
<select class="upsell-variants" name="id">
  % for variant in upsell_prod1.variants %
  <option class="upsell-variants__selector" data-src="variant.featured_image.src | img_url: 'master'" value="variant.id">
   variant.title %comment% -  variant.price | money  %endcomment%. 
  % if variant.inventory_quantity <= 0 %- Sold Out%endif%
  </option>
% endfor %
</select>

【讨论】:

处理选择更改比处理选项单击要好得多,但是这个问题主要是关于从 @Chris G 正是这样做的。如果您查看更新后的 HTML,我将 option 元素的值更改为图像 URL。 OP 也可以继续使用 data-* 属性,并保持原来的 value 属性。 是的,我没有看到,但这是一个 shopify 模板,它将依赖于 id 的值,而不是一些图像 url。同样,这特别是关于获取data-src 属性的值;我的示例代码对我来说很好用,但由于某种原因甚至不适用于 OP。更改源 HTML 在这里会 100% 适得其反。 "我想做的是,当我选择一个变体时,特色图像也会更改为所选变体的特色图像,但我不知道我应该如何获取它的属性。" OP 知道如何获取属性,他在原始代码中使用 $().attr() 。 OP 想要一个绑定到 select 元素的事件处理程序,而不是读取状态的按钮上的单击处理程序。我想同意不同意! 同样,处理 select onchange 非常好,并且比每个选项的单击处理程序更可取。那不是我的意思。我的观点是 OP 正在读取错误的属性,而不是修复他们的 jQuery 代码,而是更改了他们的 HTML。这是没有意义的,并且可能会引入其他问题。部分答案是 OP 只是将 var main_img = $(this).attr('data-variant'); 更改为 var main_img = $(this).attr('data-src'); (他们代码中的 only 问题),但考虑到他们的 cmets,由于某些未知原因,这仍然对他们不起作用。 【参考方案2】:

这个解决方案对我有用:

  $('.upsell-variants').on('change', function() 
    var optionSelected = $("option:selected", this);
    var main_img = $(optionSelected).data("src");
    $('.product__upsell-image img').attr('src', main_img);
  );

【讨论】:

以上是关于Shopify- 获取属性形式 <select>的主要内容,如果未能解决你的问题,请参考以下文章

Shopify:在 JavaScript 中获取当前登录的用户 ID

如何从 Shopify SDK 中获取收藏?

如何通过 Laravel 中的 API 从 Shopify 商店获取所有订单

从Shopify发送获取请求

如何从 Shopify Python API 获取所有产品 ID

Shopify - 通过多个变体 ID 检索多个变体详细信息