你好,小白不懂求问。请问有一个产品,有多个颜色变体选项,每个变体选项有多张图片,但是在产品详情页上,选中一个颜色变体值,它会展示所有颜色变体的图片。如何通过图片的alt值,实现当选中某个颜色变体值,只展示对应的颜色图片,而其他颜色变体值对应的图片隐藏起来?
//我按youtube上的方法,先将style.dispaly="none",让thumbnail-alt={{ media.alt }},这样当我选中另一个颜色变体的值时,需要刷新网页,对应的图片才能展示出来。
{% for media in product.media %}{%- assign imgNo = forloop.index0 -%}{% case media.media_type %}{% when 'image' %} <{%- if settings.enable_lightbox -%}a href="{{ media | img_url: 'master' }}"{% else %}div{% endif %} {% if product.selected_or_first_available_variant.featured_image.alt != media.alt and product.selected_or_first_available_variant.featured_image.alt != blank %} style="display:none" {% endif %} thumbnail-alt={{ media.alt }}
//然后再添加当选项改变时的代码,来更新对应的图片、价格等信息,以下代码中的_filterImgVariant是我新构造的函数来实现我想要的效果。但是它不起作用。
/*** Event handler for when a variant input changes. */ _onSelectChange: function() { var variant = this._getVariantFromOptions(); this.$container.trigger({ type: 'variantChange', variant: variant }); if (!variant){ return; } this._updateMasterSelect(variant); this._updateImages(variant); this._filterImgVariant(variant); this._updatePrice(variant); this._updateSKU(variant); this.currentVariant = variant; if (this.enableHistoryState) { this._updateHistoryState(variant); } }, _filterImgVariant: function(variant){ if(this.currentVariant.featured_image && this.currentVariant.featured_image.alt){ document.querySelectorAll('[thumbnail-alt]').forEach(img => img.style.display = "none") const currentImgAlt = this.currentVariant.featured_image.alt const thumbnailSelector = '[thumbnail-alt = '${currentImgAlt}']' document.querySelectorAll('[thumbnail-alt]').forEach(img => img.style.display = "block") } else { document.querySelectorAll('[thumbnail-alt]').forEach(img => img.style.display = "block") } }, _updateImages: function(variant){ var variantImage = variant.featured_image || {}; var currentVariantImage = this.currentVariant.featured_image || {}; if (!variant.featured_image || variantImage.src === currentVariantImage.src){ return; } this.$container.trigger({type: 'variantImageChange', variant: variant }); }, _updatePrice: function(variant){ if (variant.price === this.currentVariant.price && variant.compare_at_price === this.currentVariant.compare_at_price){ return; } this.$container.trigger({ type: 'variantPriceChange', variant: variant }); },
请问各位前辈,我新添加的_filterImgVariant存在什么问题它为什么不起作用。当我选择其他的颜色变体值时,仍然需要重新刷新网页才能展示对应的图片。我不知道问题在哪儿。
首先,你的代码看起来有些问题。你在_filterImgVariant
函数中试图获取当前选中的variant的featured_image的alt属性,然后在querySelectorAll中选择匹配这个alt的元素并显示它。然而,你的querySelectorAll语句中的字符串拼接似乎有些问题,你需要在字符串内使用模板字符串(${...}
)而不是直接拼接字符串。
另外,你的代码中,当this.currentVariant.featured_image.alt
存在时,你隐藏了所有图片,然后显示了当前选中的图片。但是,你并没有在隐藏所有图片后重新显示当前选中的图片。你应该先隐藏所有图片,然后再显示当前选中的图片。
以下是我对你的代码的修改:
_filterImgVariant: function(variant){ if(variant.featured_image && variant.featured_image.alt){ document.querySelectorAll('[thumbnail-alt]').forEach(img => img.style.display = "none") const currentImgAlt = variant.featured_image.alt const thumbnailSelector = `[thumbnail-alt = '${currentImgAlt}']` // 使用模板字符串进行字符串拼接 document.querySelectorAll(thumbnailSelector).forEach(img => img.style.display = "block") } else { document.querySelectorAll('[thumbnail-alt]').forEach(img => img.style.display = "block") }}
此外,你可能还需要注意,你在_updateImages
函数中只是触发了'variantImageChange'事件,但并没有实际更新图片。你可能需要在触发事件后手动调用_filterImgVariant
函数来更新图片。
希望这些信息能帮到你!如果你还有其他问题,欢迎继续提问。
问题内容: 当值由设置时,事件处理程序中的逻辑未运行,但当用户使用鼠标选择值时,该逻辑确实运行。为什么是这样? 问题答案: 因为该事件需要由用户而不是通过JavaScript代码启动的实际浏览器事件。 而是这样做: 要么
我运行这段代码的时候,点击部件就会出现 Uncaught TypeError: Cannot read properties of undefined (reading 'position')at VertexEnumerator.js:87:28 这样的错误
我正在使用Primefaces 3.5数据表。该表已启用多重选择模式。基本上,该表与[本次展示][1]中的最后一个表相同。表的定义如下 因此,当用户通过单击复选框选择一些行,然后意外地单击一行时,除了用户最后单击的那一行之外,所有选中的行都将被取消选中。 问题是:是否有任何解决方法来维护选中的行,即使用户将单击该行的“退出”复选框? 我的一些观察: 如果用户按Ctrl键并单击该行,则所有其他行都将
问题内容: 因此,我一直在编写一个简单的3D GUI应用程序,旨在让用户只需双击JAR文件即可使用。在将其放入JAR文件之前,它可以正常工作,并且在命令提示符下运行时(在jar文件的目录中键入“ java -jar Modeler.jar”),可以在JAR文件中使其完美运行。但是,当我双击它时,什么也没有发生。它运行完美,没有命令提示符下的错误。我从经验中知道,没有显示启动时的崩溃报告,因为控制台
进程优先权 当计划线程时使用的优先权。在有需要时可调整优先权到较高或较低。 文件位置 你可以为不同的文件类型改变文件夹。在默认情况下,大部分的文件设置在设置位置。然而, 一些文件是保存在 profiles目录和全部日志文件保存在 logs 目录。 文件关联(只限于完整版本) 文件关联是 Navicat 使用什么来打开 Navicat 已保存的文件。例如:.npt 文件(数据传输设置文件)将会使用数
问题内容: 我正在使用。 我得到的正确值,即最大日期。 但是对于我来说,当我真的想要第三条记录(具有最大日期值的记录)中的“ ta3”值时,只需获取第一条记录的值即可,即“ ta1”。 例如 问题答案: 您需要GROUP BY子句或更复杂的查询。 对于示例数据,这将返回3行。 您更有可能想要: 对于示例数据,这将返回1行: 在主要的DBMS中,当select-list中包含聚合列和非聚合列的混合时