Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Помогите найти ошибку. (https://javascript.ru/forum/events/63267-pomogite-najjti-oshibku.html)

Batyabest 27.05.2016 15:44

Помогите найти ошибку.
 
Добрый день.
При выборе определенной опции товара, стоимость этой опции должна прибавляться к исходной стоимости товара. Но вместо этого пишет Nan

Вот скрипт

var price = 0;    
    $.each( msoptionsprice, function( key, value ) {
        var ajson = msoptionsprice[key] != "" ? jQuery.parseJSON(msoptionsprice[key]) : {};
      
        $('select[name="options['+key+']"]').change(function() {
            var price = 0; 
            var priceCheched = 0;
            var priceSelect = 0;
            var spval = $(this).val();
            if (spval == 0) return false;
            
            $.each( msoptionsprice, function( key, value ) {
                var ajson = msoptionsprice[key] != "" ? jQuery.parseJSON(msoptionsprice[key]) : {};
                $.each( $('input[name^="options['+key+']"]:checkbox:checked'), function( key, value ) {
                    if ($(this).attr('data-count')) {
                        priceCheched += parseInt(ajson[$(this).val()]['price']) * parseInt($(this).attr('data-count'));
                    } else {
                        priceCheched += parseInt(ajson[$(this).val()]['price']);
                    }
                });
                $.each( $('input[name="options['+key+'][]"]:radio:checked'), function( key, value ) {
                    if (ajson[$(this).val()]) {
                        priceCheched += parseInt(ajson[$(this).val()]['price']);
                    }
                });
                $.each( $('select[name="options['+key+']"] option:selected'), function( key, value ) {
                    if (ajson[$(this).val()]) {
                        priceSelect += parseInt(ajson[$(this).val()]['price']);
                    }
                });
                price = parseInt(priceCheched) + parseInt(priceSelect); 
                
            });
            $('.pr_change').html(parseInt(price));
        });
        
        $('input[name^="options['+key+']"]').change(function() {
            var price = 0;   
            var priceCheched = 0;
            var priceSelect = 0;
            var spval = $(this).val();
            if (spval == 0) return false;
            
            $.each( msoptionsprice, function( key, value ) {
                
                var ajson = msoptionsprice[key] != "" ? jQuery.parseJSON(msoptionsprice[key]) : {};
                
                $.each( $('input[name^="options['+key+']"]:checkbox:checked'), function( key, value ) {
                    if (ajson[$(this).val()]) {
                        if ($(this).attr('data-count')) {
                            priceCheched += parseInt(ajson[$(this).val()]['price']) * parseInt($(this).attr('data-count'));
                        } else {
                            priceCheched += parseInt(ajson[$(this).val()]['price']);
                        }
                    }
                });
                $.each( $('input[name="options['+key+'][]"]:radio:checked'), function( key, value ) {
                    if (ajson[$(this).val()]) {
                        priceCheched += parseInt(ajson[$(this).val()]['price']);
                    }
                });
                $.each( $('select[name="options['+key+']"] option:selected'), function( key, value ) {
                    if (ajson[$(this).val()]) {
                        priceSelect += parseInt(ajson[$(this).val()]['price']);
                    }
                });
                
                price = parseInt(priceCheched) + parseInt(priceSelect); 
            });
            $('.pr_change').html(parseInt(price));
        });
        
        $('span.minus, span.plus').click(function() {
            var input = $(this).closest('.count').find('input[name^="options['+key+']"]');
            
            
            if ( $(this).hasClass("plus") ) {
                $(input).attr('data-count', parseInt(input.attr('data-count')) + parseInt(1));
        	} else if ( $(this).hasClass("minus") ) {
        	    $(input).attr('data-count', parseInt(input.attr('data-count')) - parseInt(1));
        	}
        	
        	if ($(input).attr('data-count') > 0) {
                $(this).closest('.count').find('input[name^="options['+key+']"]').attr('checked', true);
            } else {
                $(this).closest('.count').find('input[name^="options['+key+']"]').attr('checked', false);
            }
            $('input[name^="options['+key+']"]').change();
            
            /*$(this).closest('.count').find('input[name="options['+key+'][]"]').attr('checked', true);
            $('input[name="options['+key+'][]"]').change();*/
            
            console.log($(this).closest('.count').find('input[name^="options['+key+']"]'));
            //console.log($(this).closest('.count').find('input[name="count"]').val());
            /*if ($(this).closest('.count').find('input[name="count"]').val() > 0) {
                $(this).closest('.count').find('input[name="options['+key+'][]"]').attr('checked', true);
            } else {
                $(this).closest('.count').find('input[name="options['+key+'][]"]').attr('checked', false);
            }*/
        });
        
        
        /* if (ajson[$('select[name="options['+key+']"] option:selected').val()]) {
            price = parseInt(price) + parseInt(ajson[$('select[name="options['+key+']"] option:selected').val()]['price']);
        } */
        
        

    });

Botik21 01.06.2016 01:46

Данных не достаточно. Код ужасный, списка элементов нет – ни кто разбираться не будет.
Не понятно что в msoptionsprice – может там не число приходит, может поля нужного нет, может там значение не верное, да и в таком коде вполне может быть ошибка.


Часовой пояс GMT +3, время: 15:49.