Перейти к содержанию
Официальный форум поддержки Simpla

Рекомендуемые сообщения

Всем привет, если кто разбирается в jquery подскажите пожалуйста почему приведённый ниже код не работает с jquery 3.3.1 , и чудесно работает с версией 1.7.1 ?

 

 

function changeColor(){
var color = $('input[name=color]:checked'),
arr = [];

$('#colors label').removeClass('active');
color.parent().addClass('active');

$('#heights label').remove(); //удаляем все ростовки
$.each(variants, function(id, val) {
if(val['color'] == color.val() && $.inArray(val['height'], arr) < 0) {
arr.push(val['height']);
$('#heights').append('<label><input type="radio" name="height" value="' + val['height'] + '" />' + val['height'] + '</label>');
}
});

if(arr.length > 1) $('#heights').show();
else $('#heights').hide();

$("input[name=height]:first").attr('checked', true).parent().addClass('active');
changeHeight();
}

function changeHeight(){
var height = $('input[name=height]:checked'),
c = $('input[name=color]:checked').val(),
arr = [];

$('#heights label').removeClass('active');
height.parent().addClass('active');

$('#variants label').remove(); //удаляем все ростовки
$.each(variants, function(id, val) {
if(val['color'] == c && val['height'] == height.val() && $.inArray(val['name'], arr) < 0) {
arr.push(val['name']);
$('#variants').append('<label><input type="radio" name="variant" value="' + id + '" />' + val['name'] + '</label>');
}
});

if(arr.length > 1) $('#variants').show();
else $('#variants').hide();

$("input[name=variant]:first").attr('checked', true).parent().addClass('active');
changeVariant();
}

function changeVariant(){
var variant = $('input[name=variant]:checked'),
val = variants[variant.val()],
images_ids = val['images_ids'],
image_id = images_ids[0],
arr = [];

$('.images a').hide();
if(image_id != '' && $('#image' + image_id) !== 'undefined') {
$('#big_image img').attr('src', $('#image'+image_id).data('img'));
$.each(images_ids, function(id, val) { $('#image' + val).show(); });
}

$('#variants label').removeClass('active');
variant.parent().addClass('active');

$('.compare_price').text(val['compare_price']);
$('.price').text(val['price']);
}

$(function() {
$('#colors input').live('change', function(){ changeColor(); });
$('#heights input').live('change', function(){ changeHeight(); });
$('#variants input').live('change', function(){ changeVariant(); });
changeColor();
});

Ссылка на сообщение
Поделиться на другие сайты

Попробуйте на on поменять

Цвета стали выбираться , а размер нет. В консоли выдаёт ошибку связанную с live

post-22572-0-06385800-1521390326_thumb.png

Изменено пользователем Gruzin
Ссылка на сообщение
Поделиться на другие сайты
  • 9 месяцев спустя...

Друзья, у меня в части кода

$('.prc-old').text(val['compare_price']);   
$('.calcitog').text(val['price']);

конвертация не работает. Дело в том, что в настройках главная валюта идет $ и она скрыта, но вторая идет рубль, которая активна, т.е. товарам в админке задается цена в долл., а на сайте по умолчанию отображается в рублях.

Везде хорошо работает, только на странице товара такой глюк.

Блок с price-ом:

<div class="podcenlist prod">
            <div class="skidka">
            <div class="prc-old"{if $product->variant->compare_price > 0}{else} style="display: none;"{/if}>
     {if $product->variant->compare_price > 0}<span><b class="clcomp">{$product->variant->compare_price|convert}</b></span>{/if}</div>
                </div>
<div class="cenlist">
     <div class="prc-new"><span><b class="calcitog">{$product->variant->price|convert}</b> {$currency->sign|escape}</span></div>
</div>
<button type="submit" class="but addcart i-basket" value="" data-result-text="Хочу еще">Купить</button>
</div>

Делаю еще так:

$('.prc-old').text(val['compare_price|convert']);   
$('.calcitog').text(val['price|convert']);

Цена конвертируется, но уже change-ер не работает.

 

Подскажите, пожалуйста, как это исправить?

Спасибо.

Ссылка на сообщение
Поделиться на другие сайты

Разобрался ))

 нужно было дописать в скрипте "|convert"

var variants = {
        {foreach $product->variants as $v} '{$v->id}': {literal}{{/literal}'color':'{$v->color}', 'images_ids':[{$v->images_ids}], 'height':'{$v->height}', 'name':'{$v->name}', 'price':'{$v->price|convert}', 'compare_price':'{$v->compare_price|convert}'{literal}}{/literal},
        {/foreach}   
    };
Ссылка на сообщение
Поделиться на другие сайты

Друзья, помогите разобраться в скрипте.

Добавил еще один пункт к вариантам - это RAM. Включил его везде, где можно, последний шаг - это в карточке товара скрипт, в него тоже добавил, но не пашет ((

<script>

    var variants = {
        {foreach $product->variants as $v} '{$v->id}': {literal}{{/literal}'color':'{$v->color}', 'images_ids':[{$v->images_ids}], 'ram':'{$v->ram}', 'height':'{$v->height}', 'name':'{$v->name}', 'price':'{$v->price|convert}', 'compare_price':'{$v->compare_price|convert}'{literal}}{/literal},
        {/foreach}   
    };

    {literal}    
    function changeColor(){
        var color = $('input[name=color]:checked'),
            arr = []; 
            
        $('#colors label').removeClass('active');   
        color.parent().addClass('active');
        
        $('#rams label').remove(); //удаляем все ростовки
        $('#heights label').remove(); //удаляем все ростовки
        $.each(variants, function(id, val) {
            if(val['color'] == color.val() && $.inArray(val['ram'] && $.inArray(val['height'], arr) < 0) { 
                arr.push(val['ram']); 
                arr.push(val['height']);   
                $('#rams').append('<label><input type="radio" name="ram" value="' + val['ram'] + '" />' + val['ram'] + '</label>'); 
                $('#heights').append('<label><input type="radio" name="height" value="' + val['height'] + '" />' + val['height'] + '</label>'); 
            }
        });
        
        if(arr.length > 0) $('#rams').show();
        else $('#rams').hide();
        
        if(arr.length > 0) $('#heights').show();
        else $('#heights').hide();       

        $("input[name=ram]:first").attr('checked', true).parent().addClass('active');
        changeRam(); 
        $("input[name=height]:first").attr('checked', true).parent().addClass('active');
        changeHeight();       
    }
    
    function changeRam(){
        var ram = $('input[name=ram]:checked'),
            c = $('input[name=color]:checked').val(),
            arr = []; 
            
        $('#rams label').removeClass('active');   
        ram.parent().addClass('active');

        $('#variants label').remove(); //удаляем все ростовки
        $.each(variants, function(id, val) {
            if(val['color'] == c && val['ram'] == ram.val() && $.inArray(val['name'], arr) < 0) { 
                arr.push(val['name']);   
                $('#variants').append('<label><input type="radio" name="variant" value="' + id + '" />' + val['name'] + '</label>'); 
            }
        });
        
        if(arr.length > 1) $('#variants').show();
        else $('#variants').hide();

        $("input[name=variant]:first").attr('checked', true).parent().addClass('active');
        changeVariant();       
    }

    function changeHeight(){
        var height = $('input[name=height]:checked'),
            c = $('input[name=color]:checked').val(),
            arr = []; 
            
        $('#heights label').removeClass('active');   
        height.parent().addClass('active');

        $('#variants label').remove(); //удаляем все ростовки
        $.each(variants, function(id, val) {
            if(val['color'] == c && val['height'] == height.val() && $.inArray(val['name'], arr) < 0) { 
                arr.push(val['name']);   
                $('#variants').append('<label><input type="radio" name="variant" value="' + id + '" />' + val['name'] + '</label>'); 
            }
        });
        
        if(arr.length > 1) $('#variants').show();
        else $('#variants').hide();

        $("input[name=variant]:first").attr('checked', true).parent().addClass('active');
        changeVariant();       
    }
    
    function changeVariant(){
        var variant = $('input[name=variant]:checked'),
            val = variants[variant.val()],
            images_ids = val['images_ids'],
            image_id = images_ids[0],
            arr = [];
            
        $('.images a').hide();
        if(image_id != '' && $('#image' + image_id) !== 'undefined') {
            $('#big_image img').attr('src', $('#image'+image_id).attr('rel'));
            $.each(images_ids, function(id, val) { $('#image' + val).show(); });
        }
            
        $('#variants label').removeClass('active');   
        variant.parent().addClass('active');            

        $('.prc-old').text(val['compare_price']);   
        $('.calcitog').text(val['price']);
    }

    $(function() {
        $('#colors input').live('change', function(){ changeColor(); });
        $('#rams input').live('change', function(){ changeRam(); });
        $('#heights input').live('change', function(){ changeHeight(); });
        $('#variants input').live('change', function(){ changeVariant(); });
        changeColor();
    });
    {/literal}
    </script>

Вы заметите "ram".

 

Отладчик выдает пока синтаксическую ошибку в:

if(val['color'] == color.val() && $.inArray(val['ram'] && $.inArray(val['height'], arr) < 0) { 
Ссылка на сообщение
Поделиться на другие сайты

Решил этот вопрос так:

if(val['color'] == color.val() && $.inArray(val['ram'],val['height'], arr) < 0) { 

Но, к сожалению, скрипт не правильно работает ((. Changer не сортирует варианты, а выдает все, даже варианты с одинаковыми данными.

Ссылка на сообщение
Поделиться на другие сайты

Решил этот вопрос так:

if(val['color'] == color.val() && $.inArray(val['ram'],val['height'], arr) < 0) { 

Но, к сожалению, скрипт не правильно работает ((. Changer не сортирует варианты, а выдает все, даже варианты с одинаковыми данными.

 

Не ленитесь, прочтите пару строк документации к этой функции. Сразу ведь видно, что делается чушь полная...

Ссылка на сообщение
Поделиться на другие сайты

Решил так:

if(val['color'] == color.val() && $.inArray(val['ram'], arr) && $.inArray(val['height'], arr) < 0) {

но это не вариант. Все равно много недочетов.

 

Нужно решить. Кто может взяться? Напишите мне, пожалуйста.

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...