Да, получилось, проблема была в следующем: 
{* Многомерные комплектации *}
<span class="pname">{$product.offer_caption|default:'Комплектация'}</span>
{* Подгрузим у многомерных комплектаций фото к их вариантам *}
{$product->fillMultiOffersPhotos()}
{* Переберём доступные многомерные комплектации *}
<div class="multiOffers">
    {foreach $product.multioffers.levels as $level}
        {if !empty($level.values)}
            <div class="title">{if $level.title}{$level.title}{else}{$level.prop_title}{/if}</div>
====>    {if !$level.is_photo && !isset($level.values_photos)} {* Если отображать не как фото (выпадающим списком)*}
                <select name="multioffers[{$level.prop_id}]" data-prop-title="{if $level.title}{$level.title}{else}{$level.prop_title}{/if}">
                    {foreach $level.values as $value}
                        <option value="{$value.val_str}">{$value.val_str}</option>   
                    {/foreach}
                </select>
            {else} {* Как фото *}
                <div class="multiOfferValues">
                    <input type="hidden" name="multioffers[{$level.prop_id}]" data-prop-title="{if $level.title}{$level.title}{else}{$level.prop_title}{/if}"/>
                    {foreach $level.values as $value}
                        {if isset($level.values_photos[$value.val_str])}
                            <a class="multiOfferValueBlock {if $value@first}sel{/if}" data-value="{$value.val_str}" data-image="{$level.values_photos[$value.val_str]->getUrl(310,310,'axy')}" data-is-dialog="1" title="{$value.val_str}"><img src="{$level.values_photos[$value.val_str]->getUrl(30,30,'axy')}"/></a>
                        {else}
                            <a class="multiOfferValueBlock likeString {if $value@first}sel{/if}" data-value="{$value.val_str}" data-is-dialog="1" title="{$value.val_str}">{$value.val_str}</a>
                        {/if}
                    {/foreach}
                </div>
            {/if}
        {/if}
    {/foreach}
</div>
{if $product->isOffersUse()}
    {foreach from=$product.offers.items key=key item=offer name=offers}
        <input value="{$key}" type="hidden" name="hidden_offers" class="hidden_offers" {if $smarty.foreach.offers.first}checked{/if} id="offer_{$key}" data-info='{$offer->getPropertiesJson()}' {if $check_quantity}data-num="{$offer.num}"{/if} data-change-cost='{ ".offerBarcode": "{$offer.barcode|default:$product.barcode}", ".myCost": "{$product->getCost(null, $key)}", ".lastPrice": "{$product->getOldCost($key)}"}' data-images='{$offer->getPhotosJson()}' data-sticks='{$offer->getStickJson()}'/>
    {/foreach}
    
    <input type="hidden" name="offer" value="0"/>
{/if}
Где стрелка - там показывается комплектация цвет, а называется фото. Хотя у вас в документации http://readyscript.ru/dev-manual/dev_co … v_code_var написано:
Имя переменной должно отражать суть её содержимого.
Я не был в курсе, что photo - это цвет, а наш макет не подразумевает фотографий в месте смены комплектаций (у нас просто квадраты), и поэтому, в первый раз, я сделал вот так:
<div class="multiOffers">
    {foreach $product.multioffers.levels as $level}
        {if !empty($level.values) && $level.title != 'Цвет'}
            <div class="multiofferTitle">{if $level.title}{$level.title}{else}{$level.prop_title}{/if}</div>
            {if !$level.is_photo && !isset($level.values_photos)} {* Если отображать не как фото (выпадающим списком)*}
                <select name="multioffers[{$level.prop_id}]" data-prop-title="{if $level.title}{$level.title}{else}{$level.prop_title}{/if}">
                    {foreach $level.values as $value}
                        <option value="{$value.val_str}">{$value.val_str}</option>
                    {/foreach}
                </select>
                <div class="multiofferBlock multiofferBlock{$level.prop_id}">
                    {foreach $level.values as $value key=i}
                        <div class="moItem{if $i == 1} active{/if}"><div class="moItemInner">{$value.val_str}</div></div>
                    {/foreach}
                </div>
                <div class="clearfix"></div>
            {else}
                <div class="multiOfferValues">
                    <input type="hidden" name="multioffers[{$level.prop_id}]" data-prop-title="{if $level.title}{$level.title}{else}{$level.prop_title}{/if}"/>
                    {foreach $level.values as $value}
                        {if isset($level.values_photos[$value.val_str])}
                            <a class="multiOfferValueBlock {if $value@first}sel{/if}" data-value="{$value.val_str}" title="{$value.val_str}"><img src="{$level.values_photos[$value.val_str]->getUrl(40,40,'axy')}"/></a>
                        {else}
                            <a class="multiOfferValueBlock likeString {if $value@first}sel{/if}" data-value="{$value.val_str}" title="{$value.val_str}">{$value.val_str}</a>
                        {/if}
                    {/foreach}
                </div>
            {/if}
        {else if !empty($level.values) && $level.title == 'Цвет'}
            <div class="multiofferTitle">{if $level.title}{$level.title}{else}{$level.prop_title}{/if}</div>
            <select name="multioffers[{$level.prop_id}]" data-prop-title="{if $level.title}{$level.title}{else}{$level.prop_title}{/if}">
                {foreach $level.values as $value}
                    <option value="{$value.val_str}">{$value.val_str}</option>
                {/foreach}
            </select>
            <div class="multiofferBlock multiofferBlock{$level.prop_id}">
                {foreach $level.values as $value key=i}
                    <div class="moItem{if $i == 1} active{/if}"><div class="moItemInner" style="background-color:#fff;background-image: linear-gradient( -45deg, {$colors.colors[$value.val_str].color2} 0%, {$colors.colors[$value.val_str].color2} 50%, {$colors.colors[$value.val_str].color1} 50%, {$colors.colors[$value.val_str].color1} 50%);" title="{$value.val_str}">{$value.val_str}</div></div>
                {/foreach}
            </div>
            <div class="clearfix"></div>
        {/if}
    {/foreach}
</div>
Сейчас все нормально, спасибо за подсказки.
Но с JS вы "здорово" придумали. Посмотрите на код - у меня там дублируется цикл и таким образом генерирует значение, так что мне его не нужно получать, оно априори есть в $(this). В итоге - это было последнее, исправление. Поменял обратно на prev(), тк как closest() начистую отказался работать.
Кстати, а чем вас prev() не устраивает? По-моему, хороший метод. Сам не проверял, но по логике, должен работать в разы быстрее чем closest() так как объекты на prev и next у каждого объекта jquery при инициализации прописываются.
Скажите, а предусмотрена ли (или может в планах) такая вещь, как скрытие пустых комплектаций (с 0 остатком)? Чтобы при смене, например, цвета, менялся и список остальных свойств, в зависимости от наличия на складе.
И еще вопрос - у вас в демках и в моей теме тоже остатки отображаются стиками, индикатором, возможно ли как то быстро отказаться от этой системы, и выводить остатки обычным числом?