Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.02.2018, 16:29
Аспирант
Отправить личное сообщение для wisma Посмотреть профиль Найти все сообщения от wisma
 
Регистрация: 10.02.2014
Сообщений: 32

Вывод фото варианта товара [Нужна помощь]
Есть скрипт:
$('#pic-changer').change(function(){ //if the select value gets changed
   var imageSource = $(this).find(':selected').data('picture'); //get the data from data-picture attribute
   if(imageSource){ //if it has data
      $('#image-location').html('<img src="/files/downloads/'+imageSource+'">'); // insert image in div image-location
   } else {
      $('#image-location').html(''); //remove content from div image-location, thus removing the image
   }
})


И вывод в шаблоне
<select name="variant" id="pic-changer" class="fn_variant variant_select {if $product->variants|count == 1}hidden{/if}">
                {foreach $product->variants as $v}
                    <option value="{$v->id}" data-picture="{$v->attachment}"  data-price="{$v->price|convert}" data-stock="{$v->stock}"{if $v->compare_price > 0} data-cprice="{$v->compare_price|convert}"{/if}{if $v->sku} data-sku="{$v->sku|escape}"{/if}>{if $v->name}{$v->name|escape}{else}{$product->name|escape}{/if}</option>
               {/foreach}
            </select>
			<div id="image-location"></div>

Вот когда выводятся много товаров то на странице продукта скрипт обрабатывает только первый товар и выводит фото к нему, на других товарах только выводятся значения option но не фото, можно ли как-то заставить работать скрипт по допустим:
<div id="image-location" value="{$v->id}" >

Или любое другое значение, в {$v->id} идет генерация от движка ВариантАйди.

В js полный нуб и не знаю
А интересует заставить скрипт работать на всех товарах...
Ответить с цитированием
  #2 (permalink)  
Старый 23.02.2018, 17:29
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Вероятно элементы имеют один и тот же id. Не php код надо показывать, а результирующий html, из которого бы можно было понять в чем проблема.
Ответить с цитированием
  #3 (permalink)  
Старый 23.02.2018, 17:48
Аспирант
Отправить личное сообщение для wisma Посмотреть профиль Найти все сообщения от wisma
 
Регистрация: 10.02.2014
Сообщений: 32

Сообщение от laimas Посмотреть сообщение
Вероятно элементы имеют один и тот же id. Не php код надо показывать, а результирующий html, из которого бы можно было понять в чем проблема.
так и есть, я вывел форму генирации товара в движке, я и прошу помоч мне с этим... Точнее генерировать свой ид для каждотого товара я разобрался, а вот как в скрипте заставить обрабатывать разные айди которые генерируются я не знаю...


Сам html на выходе имеет:

<form class="fn_variants preview_form" action="/cart">
                            
                <button class="button buy fn_is_preorder hidden" type="submit" data-language="pre_order">Предзаказ</button>
            
            
            <button class="button buy fn_is_stock" type="submit"><span data-language="add_to_cart">В корзину</span></button>
            
            <select name="variant" id="pic-changer" class="fn_variant variant_select ">
                                    <option value="21" data-picture="0-02-04-25a8cf755ac0a7b49c90ea9220a17416e17e64ebb8f2d5c9b8501b1472739332_full.jpg"  data-price="2 899" data-stock="555" data-sku="wer">qwdqwdd</option>
                                   <option value="117" data-picture="0-02-04-0171597cbb26cc1ded86ab5a78699bbd925c458ed448d4f4025dfc3ab4912d2f_full.jpg"  data-price="2 899" data-stock="444" data-sku="ffff">цвет 2</option>
                                   <option value="118" data-picture="0-02-04-95763fcaba4a54041db7de7e6872478b5ec5d6d9d509788f70d8debddad53eee_full.jpg"  data-price="2 899" data-stock="33" data-sku="вввыы">вввыыыы</option>
                           </select>
			<div id="image-location" data-id="118"></div> 
        </form>

второй товар...
<form class="fn_variants preview_form" action="/cart">
                            
                <button class="button buy fn_is_preorder hidden" type="submit" data-language="pre_order">Предзаказ</button>
            
            
            <button class="button buy fn_is_stock" type="submit"><span data-language="add_to_cart">В корзину</span></button>
            
            <select name="variant" id="pic-changer" class="fn_variant variant_select ">
                                    <option value="20" data-picture="55-belyj.75x75.jpg"  data-price="2 899" data-stock="8" data-sku="123">цвет 32</option>
                                   <option value="119" data-picture="166-lilovyj.75x75.jpg"  data-price="2 899" data-stock="44" data-sku="321">цвет 443</option>
                                   <option value="120" data-picture="610-izumrud.75x75.jpg"  data-price="2 899" data-stock="44" data-sku="431">цввет 34</option>
                           </select>
			<div id="image-location" data-id="120"></div> 
        </form>
Ответить с цитированием
  #4 (permalink)  
Старый 23.02.2018, 18:58
Профессор
Отправить личное сообщение для Manyasha Посмотреть профиль Найти все сообщения от Manyasha
 
Регистрация: 21.09.2015
Сообщений: 196

wisma,
id должны быть уникальными
<form class="fn_variants preview_form" action="/cart">
   <button class="button buy fn_is_preorder hidden" type="submit" data-language="pre_order">Предзаказ</button>
   <button class="button buy fn_is_stock" type="submit"><span data-language="add_to_cart">В корзину</span></button>
   <select name="variant" class="fn_variant variant_select ">
      <option value="21" data-picture="http://s1.iconbird.com/ico/2013/8/428/w128h1281377930292cattied2.png"  data-price="2 899" data-stock="555" data-sku="wer">qwdqwdd</option>
      <option value="117" data-picture="http://s1.iconbird.com/ico/2013/8/428/w128h1281377930213catbox2.png"  data-price="2 899" data-stock="444" data-sku="ffff">цвет 2</option>
      <option value="118" data-picture="http://s1.iconbird.com/ico/2013/9/430/w128h1281378622418catlaptop.png"  data-price="2 899" data-stock="33" data-sku="вввыы">вввыыыы</option>
   </select>
   <div class="image-location" data-id="118"></div>
</form>

<form class="fn_variants preview_form" action="/cart">
   <button class="button buy fn_is_preorder hidden" type="submit" data-language="pre_order">Предзаказ</button>
   <button class="button buy fn_is_stock" type="submit"><span data-language="add_to_cart">В корзину</span></button>
   <select name="variant" class="fn_variant variant_select ">
      <option value="20" data-picture="http://s1.iconbird.com/ico/2013/8/428/w128h1281377930224catdrunk2.png"  data-price="2 899" data-stock="8" data-sku="123">цвет 32</option>
      <option value="119" data-picture="http://s1.iconbird.com/ico/2013/8/428/w128h1281377930234catfight2.png"  data-price="2 899" data-stock="44" data-sku="321">цвет 443</option>
      <option value="120" data-picture="http://s1.iconbird.com/ico/2013/9/430/w128h1281378622451catrascal.png"  data-price="2 899" data-stock="44" data-sku="431">цввет 34</option>
   </select>
   <div class="image-location" data-id="120"></div>
</form>

<script src="//code.jquery.com/jquery-1.9.1.min.js"></script>
<script>
$(".fn_variant.variant_select").change(function() { //if the select value gets changed
  var imageSource = $(this).find(':selected').data('picture'); //get the data from data-picture attribute
  if (imageSource) { //if it has data
    $(this).next().html('<img src=' + imageSource + '>'); // insert image in div image-location
  } else {
    $(this).next().html(''); //remove content from div image-location, thus removing the image
  }
})
</script>
Ответить с цитированием
  #5 (permalink)  
Старый 23.02.2018, 19:40
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Можно же просто по имени тега - select, если есть другие, использовать имя списка.

$('select[name=variant]').change(function(){ //if the select value gets changed
      var o = $(this), im = o.find(':selected').data('picture'); //get the data from data-picture attribute
      o.next().html(im ? '<img src="/files/downloads/'+im+'">' : ''); // insert image in div image-location
})


С какой целю вообще даются спискам идентификаторы?

Последний раз редактировалось laimas, 23.02.2018 в 20:09.
Ответить с цитированием
  #6 (permalink)  
Старый 23.02.2018, 21:06
Аспирант
Отправить личное сообщение для wisma Посмотреть профиль Найти все сообщения от wisma
 
Регистрация: 10.02.2014
Сообщений: 32

Сообщение от laimas Посмотреть сообщение
Можно же просто по имени тега - select, если есть другие, использовать имя списка.

$('select[name=variant]').change(function(){ //if the select value gets changed
      var o = $(this), im = o.find(':selected').data('picture'); //get the data from data-picture attribute
      o.next().html(im ? '<img src="/files/downloads/'+im+'">' : ''); // insert image in div image-location
})


С какой целю вообще даются спискам идентификаторы?
Не заработал, точнее не где не выводит изображения...
а спискам даются по функционалу движка замена артикула. цены и прочее при выборе определенного варианта, нашел даже где...

/* Смена варианта в превью товара и в карточке */
$(document).on('change', '.fn_variant', function() {
    var selected = $( this ).children( ':selected' ),
        parent = selected.closest( '.fn_product' ),
        price = parent.find( '.fn_price' ),
        cprice = parent.find( '.fn_old_price' ),
        sku = parent.find( '.fn_sku' ),
        stock = parseInt( selected.data( 'stock' ) ),
        amount = parent.find( 'input[name="amount"]' ),
        camoun = parseInt( amount.val()),
        units = selected.data('units');
    price.html( selected.data( 'price' ) );
    amount.data('max', stock);
    /* Количество товаров */
    if ( stock < camoun ) {
        amount.val( stock );
    } else if ( okay.amount > camoun ) {
        amount.val( okay.amount );
    }
    else if(isNaN(camoun)){
        amount.val( okay.amount );
    }
    /* Цены */
    if( selected.data( 'cprice' ) ) {
        cprice.html( selected.data( 'cprice' ) );
        cprice.parent().removeClass( 'hidden' );
    } else {
        cprice.parent().addClass( 'hidden' );
    }
    /* Артикул */
    if( typeof(selected.data( 'sku' )) != 'undefined' ) {
        sku.text( selected.data( 'sku' ) );
        sku.parent().removeClass( 'hidden' );
    } else {
        sku.text( '' );
        sku.parent().addClass( 'hidden' );
    }
    /* Наличие на складе */
    if (stock == 0) {
        parent.find('.fn_not_stock').removeClass('hidden');
        parent.find('.fn_in_stock').addClass('hidden');
    } else {
        parent.find('.fn_in_stock').removeClass('hidden');
        parent.find('.fn_not_stock').addClass('hidden');
    }
    /* Предзаказ */
    if (stock == 0 && okay.is_preorder) {
        parent.find('.fn_is_preorder').removeClass('hidden');
        parent.find('.fn_is_stock, .fn_not_preorder').addClass('hidden');
    } else if (stock == 0 && !okay.is_preorder) {
        parent.find('.fn_not_preorder').removeClass('hidden');
        parent.find('.fn_is_stock, .fn_is_preorder').addClass('hidden');
    } else {
        parent.find('.fn_is_stock').removeClass('hidden');
        parent.find('.fn_is_preorder, .fn_not_preorder').addClass('hidden');
    }

    if( typeof(units) != 'undefined' ) {
        parent.find('.fn_units').text(', ' + units);
    } else {
        parent.find('.fn_units').text('');
    }
});
Ответить с цитированием
  #7 (permalink)  
Старый 23.02.2018, 21:14
Аспирант
Отправить личное сообщение для wisma Посмотреть профиль Найти все сообщения от wisma
 
Регистрация: 10.02.2014
Сообщений: 32

Сообщение от Manyasha Посмотреть сообщение
wisma,
id должны быть уникальными
<form class="fn_variants preview_form" action="/cart">
   <button class="button buy fn_is_preorder hidden" type="submit" data-language="pre_order">Предзаказ</button>
   <button class="button buy fn_is_stock" type="submit"><span data-language="add_to_cart">В корзину</span></button>
   <select name="variant" class="fn_variant variant_select ">
      <option value="21" data-picture="http://s1.iconbird.com/ico/2013/8/428/w128h1281377930292cattied2.png"  data-price="2 899" data-stock="555" data-sku="wer">qwdqwdd</option>
      <option value="117" data-picture="http://s1.iconbird.com/ico/2013/8/428/w128h1281377930213catbox2.png"  data-price="2 899" data-stock="444" data-sku="ffff">цвет 2</option>
      <option value="118" data-picture="http://s1.iconbird.com/ico/2013/9/430/w128h1281378622418catlaptop.png"  data-price="2 899" data-stock="33" data-sku="вввыы">вввыыыы</option>
   </select>
   <div class="image-location" data-id="118"></div>
</form>

<form class="fn_variants preview_form" action="/cart">
   <button class="button buy fn_is_preorder hidden" type="submit" data-language="pre_order">Предзаказ</button>
   <button class="button buy fn_is_stock" type="submit"><span data-language="add_to_cart">В корзину</span></button>
   <select name="variant" class="fn_variant variant_select ">
      <option value="20" data-picture="http://s1.iconbird.com/ico/2013/8/428/w128h1281377930224catdrunk2.png"  data-price="2 899" data-stock="8" data-sku="123">цвет 32</option>
      <option value="119" data-picture="http://s1.iconbird.com/ico/2013/8/428/w128h1281377930234catfight2.png"  data-price="2 899" data-stock="44" data-sku="321">цвет 443</option>
      <option value="120" data-picture="http://s1.iconbird.com/ico/2013/9/430/w128h1281378622451catrascal.png"  data-price="2 899" data-stock="44" data-sku="431">цввет 34</option>
   </select>
   <div class="image-location" data-id="120"></div>
</form>

<script src="//code.jquery.com/jquery-1.9.1.min.js"></script>
<script>
$(".fn_variant.variant_select").change(function() { //if the select value gets changed
  var imageSource = $(this).find(':selected').data('picture'); //get the data from data-picture attribute
  if (imageSource) { //if it has data
    $(this).next().html('<img src=' + imageSource + '>'); // insert image in div image-location
  } else {
    $(this).next().html(''); //remove content from div image-location, thus removing the image
  }
})
</script>
Работает, спасибо!) Ид можно генерировать допустим вариантом товара который генерирует движок.
Ответить с цитированием
  #8 (permalink)  
Старый 24.02.2018, 04:32
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от wisma
Не заработал, точнее не где не выводит изображения...
Что не работает селектор [name=value]?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дополнительное фото товара stels57 (X)HTML/CSS 0 26.03.2016 11:01