1
При Перевыборе Модификации Цена Не Меняется!
Автор Ser, 11 апр. 2014 11:54
- Авторизуйтесь для ответа в теме
Сообщений в теме: 11
#2 Castiel
Отправлено 11 Апрель 2014 - 16:55
Ser (11 Апрель 2014 - 11:54) писал:
Всем привет.
Перестала меняться цена и краткое описание при пере выборе в карточке товара модификации???
При этом модификации загружены!!!
Подскажите в чем дело??? что слетело???
Перестала меняться цена и краткое описание при пере выборе в карточке товара модификации???
При этом модификации загружены!!!
Подскажите в чем дело??? что слетело???
Здравствуйте, проблема в файле main.js
Возможно вы добавили какие то скрипты которые конфликтуют со стандартными или удалили важные функции.
Стандартный файл main.js для шаблона Весна
Скрытый текст
// Меню-аккардеон. Каталог jQuery(document).ready(function () { jQuery("ul.accordion li.parent").each(function(){ jQuery(this).append('<em class="open-close"> </em>'); }); jQuery('ul.accordion').accordion(); jQuery("ul.accordion li.active").each(function(){ jQuery(this).children().next("ul").css('display', 'block'); }); }); // Инициализация табов на странице товара function initTabs() { // Блок в котором находятся табы var tabBlock = $('#contents'); if(!tabBlock.length) { return false; } // По умолчанию делаем отметку о том что активного таба не найдено var isFind = 0; tabBlock.find('#tabs a').each(function(i){ // Если нашёлся активный там if($(this).hasClass('active')) { // Инициализируем найденный таб $(this).click(); // Ставим отметку, о том что не нужно инициализировать первый таб на странице isFind = 1; } }); // Если не найдено ни одного таба с отметкой о том что он активен if(!isFind) { // Ставим активным первый таб на странице. tabSwitch(1); } // Проверяет хэш и если по нему была открыта вкладка, то эта функция автоматически откроет её. checkTabHash(); // Если текущий адрес страницы предполагает добавление отзыва if('#goodsDataOpinionAdd' == document.location.hash) { $('#goodsDataOpinionAddBlock').show(); } // Биндим изменение хэша - проверка какой таб нужно открыть. $(window).bind('hashchange', function() { checkTabHash(); }); } // Проверяет хэш, переданый пользователем и открывает соответствующий раздел function checkTabHash() { // Определяем текущий хэш страницы var hash = window.location.hash.substr(1); if(hash == 'goodsDataOpinionAdd') { hash = 'show_tab_4'; } if(!hash.length || hash.indexOf('show_tab_') == -1) { return false; } // Открываем тот таб, который был указан в hash-е tabSwitch(hash.replace("show_tab_", '')) } // Выбор вкладки на странице товара function tabSwitch(nb) { var tabBlock = $('#contents'); tabBlock.find('#tabs a').removeClass('active'); tabBlock.find('div.tab-content').hide(); $('#tab_' + nb).addClass('active'); $('#content_' + nb).show(); if('#goodsDataOpinionAdd' != document.location.hash) { // Записываем в хэш информацию о том какой таб сейчас открыт, для возможности скопировать и передать ссылку с открытым нужным табом document.location.hash = "#show_tab_" + nb; } } // Инициализируем табы на странице $(function() { initTabs(); }); $(function(){ var $container = $('.product-list, .product-list2'); var lastPage = 1; // Скрываем навигацию по умолчанию $('.pagination').hide(); $container.infinitescroll({ navSelector : '.infinitescroll-pages', // класс элемента постраничной навигации для бесконечного скрола nextSelector : '.infinitescroll-pages a', // класс элемента постраничной навигации, ссылка на следующую страницу itemSelector : '.prod_hold, .category-info', // класс элементов, которые будем извлекать loading: { msgText: 'Пожалуйста подождите...', finishedMsg: 'Больше нет товаров.', img: zoomloaderPath ? zoomloaderPath : '/zoomloader.gif' } }, function(newElements) { var $newElems = $( newElements ).css({ opacity: 0 }); $newElems.imagesLoaded(function(){ $newElems.animate({ opacity: 1 }); $container.masonry( 'appended', $newElems, true ); }); lastPage++; // если это последняя страница, завершаем работу if(lastPage >= (infiniteScrollLastPage ? infiniteScrollLastPage : 1) ){ $container.infinitescroll('pause'); } } ); }); // Возвращает правильное окончание для слова function genWordEnd(num, e, m, mm) { // Если забыли указать окончания if(typeof (e) == "undefined") { e = ''; } if(typeof (m) == "undefined") { e = 'а'; } if(typeof (mm) == "undefined"){ e = 'oв'; } // Если передали пустую строку, вместо цифры if(0 == num.length) { num = 0; } // Превращаем цифру в правильный INT num = GetSum(num).toString(); // Получаем последний символ цифры ch1 = num.substring(num.length-1); // Получаем последний символ цифры ch2 = num.length == 1 ? 0 : num.substring(num.length-2, num.length-1); // Если последняя цифра - 1, вернем единственное число if(ch2!=1 && ch1==1) {return e;} // Если последняя цифра - от 2 до 4х , вернем множественное чило из массива с индексом 2 else if(ch2!=1 && ch1>1 && ch1<=4) {return m;} // Если последняя цифра - от 5 до 0 , вернем множественное чило из массива с индексом 3 else if(ch2==1 || ch1>4 || ch1==0) {return mm;} } $(document).ready(function(){ $('#column-left .box-heading').click(function(){ var vis = $('#column-left').find('.box-content'); if ($(this).hasClass('up')) { vis.fadeOut(); $(this).removeClass('up'); } else { vis.fadeIn(); $(this).addClass('up'); } }); $('.qty-plus').click(function(){ var quantity = $(this).parent().find('.quantity') ,currentVal = parseInt(quantity.val()) ; if (!isNaN(currentVal)){ quantity.val(currentVal + 1); quantity.trigger('keyup'); } return false; }); $('.qty-minus').click(function(){ var quantity = $(this).parent().find('.quantity') ,currentVal = parseInt(quantity.val()) ; if (!isNaN(currentVal) && !(currentVal <= 1) ){ quantity.val(currentVal - 1); quantity.trigger('keyup'); } return false; }); $(window).load(function() { $('.flexslider').flexslider({ animation: "fade", pauseOnHover: true, touch: true, animationSpeed: 1300, slideshowSpeed: 6500, smoothHeight: false, controlNav: false, directionNav: true }); }); // hide #back-top first $("#back-top").hide(); // fade in #back-top $(window).scroll(function () { if ($(this).scrollTop() > 100) { $('#back-top').fadeIn(); } else { $('#back-top').fadeOut(); } }); // scroll body to 0px on click $('#back-top img').click(function () { $('body,html').animate({ scrollTop: 0 }, 800); return false; }); $("#toggle_switch").click(function () { $('#togglerone').slideToggle(1000); if ($(this).hasClass('swap')) { $(this).removeClass("swap"); // Удаляем из cookie информацию о том, что пользователь скрыл шапку сайта deleteCookie("hide_header", {path: '/'}); } else { $(this).addClass("swap"); // Ставим в cookie информацию о том, что пользователь скрыл шапку сайта setCookie("hide_header", 1, {path: '/'}); } }); // Если шапка скрыта пользователем if(getCookie("hide_header")) { $('#togglerone').hide(); $('#toggle_switch').addClass("swap"); } }); // Работа с cookie файлами. // Получение переменной из cookie function getCookie(name) { var matches = document.cookie.match(new RegExp( "(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)" )); return matches ? decodeURIComponent(matches[1]) : undefined; } // Установка переменной в cookie function setCookie(name, value, options) { options = options || {}; var expires = options.expires; if (typeof expires == "number" && expires) { var d = new Date(); d.setTime(d.getTime() + expires*1000); expires = options.expires = d; } if (expires && expires.toUTCString) { options.expires = expires.toUTCString(); } value = encodeURIComponent(value); var updatedCookie = name + "=" + value; for(var propName in options) { updatedCookie += "; " + propName; var propValue = options[propName]; if (propValue !== true) { updatedCookie += "=" + propValue; } } document.cookie = updatedCookie; } // Удаление переменной из cookie function deleteCookie(name, options ) { options = options || {}; options.expires = -1; setCookie(name, "", options) } // Отправляет ошибку на сервер, для того чтобы служба тех поддержки могла разобраться в проблеме как можно быстрее. function sendError (desc, page, line) { var img=document.createElement('img'); img.src = 'http://storeland.ru/error/js?desc='+encodeURIComponent(desc)+'&page='+encodeURIComponent(window.location)+'&line=0'; img.style.position = 'absolute'; img.style.top = '-9999px'; try { document.getElementsByTagName('head').appendChild(img) } catch (e){} return false; } // Форматирует цену function number_format(number,decimals,dec_point,thousands_sep){var n=number,prec=decimals;var toFixedFix=function(n,prec){var k=Math.pow(10,prec);return(Math.round(n*k)/k).toString();};n=!isFinite(+n)?0:+n;prec=!isFinite(+prec)?0:Math.abs(prec);var sep=(typeof thousands_sep==='undefined')?',':thousands_sep;var dec=(typeof dec_point==='undefined')?'.':dec_point;var s=(prec>0)?toFixedFix(n,prec):toFixedFix(Math.round(n),prec);var abs=toFixedFix(Math.abs(n),prec);var _,i;if(abs>=1000){_=abs.split(/\D/);i=_[0].length%3||3;_[0]=s.slice(0,i+(n<0))+ _[0].slice(i).replace(/(\d{3})/g,sep+'$1');s=_.join(dec);}else{s=s.replace('.',dec);} var decPos=s.indexOf(dec);if(prec>=1&&decPos!==-1&&(s.length-decPos-1)<prec){s+=new Array(prec-(s.length-decPos-1)).join(0)+'0';} else if(prec>=1&&decPos===-1){s+=dec+new Array(prec).join(0)+'0';} return s;} // Превращает поле пароля в текстовое поле и обратно // @LinkObject - ссылка по которой кликнули // @InputObject - объект у которого нужно изменить тип поля function ChangePasswordFieldType (LinkObject, InputObject) { var // Ссылка по которой кликнули LObject = $(LinkObject), // Объект у которого изменяем тип с password на text IObject = $(InputObject), // Старый текст ссылки txtOld = LObject.text(), // Новый текст ссылки txtNew = LObject.attr('rel'); // Если объекты не получены, завершим работу функции if( LObject.length==0 || IObject.length==0 ) { return false; } // Изменяем у ссылки текст со старого на новый LObject.html(txtNew); // Старый текст ссылки сохраняем в атрибуте rel LObject.attr('rel', txtOld); // Изменяем тип input поля if(IObject[0].type == 'text') { IObject[0].type = 'password'; } else { IObject[0].type = 'text'; } } // Крутит изображение при обновлении картинки защиты от роботов function RefreshImageAction(img,num,cnt) { if(cnt>13) { return false; } $(img).attr('src', $(img).attr('rel') + 'icon/refresh/' + num + '.gif'); num = (num==6)?0:num; setTimeout(function(){RefreshImageAction(img, num+1, cnt+1);}, 50); } $(document).ready(function(){ //$('#tabs a').tabs(); /* Валидация формы на странице оформления заказа, а так же формы на страницы связи с администрацией $('.order form, .feedbackForm, .clientForm, .goodsDataOpinionAddForm').submit(function(){ if($(this).valid()) { // Кнопка отправки формы SubmitButton = $(this).find('input:submit, button:submit'); // Если кнопку уже нажали, видимо отправка формы производилась по нажатию на кнопку enter, не допускаем этого. if($(SubmitButton.get(0)).attr('disabled')) { return false; } // Устанавливаем на кнопку отправки формы блокировку повторной оптравки SubmitButton.attr('disabled', true); // Через 10 секунд блокировка отправки формы снимается. setTimeout('SubmitButton.attr("disabled", false);', 10000); } }).validate();*/ // Кнопки на сайте если подгружен модуль Jquery.UI if(typeof($('button.submit, button:submit, input:submit, input.button').button) == "function" ) { $('button.submit, button:submit, input:submit, input.button').button(); } // Валидация формы на странице оформления заказа, а так же формы на страницы связи с администрацией $("#myform, .feedbackForm, .clientForm, #quickform").validate({ rules: { reg_name: "required" } }); // Отправка формы по Ctrl+Enter $('form').bind('keypress', function(e){ if((e.ctrlKey) && ((e.which==10)||(e.which==13))) {$(this).submit();} // Отправка данных формы по нажатию на Enter в случае если курсор находится в input полях (В некоторых браузерах при нажатии по enter срабатывает клик по первому submit полю, которое является кнопкой назад. Для этого написан этот фикс) }).find('input').bind('keypress', function(e){ if(((e.which==10)||(e.which==13))) { try{$(this.form).submit();} catch(e){} return false; } }); // В форме оформления заказа при клике на кнопку назад просто переходим на предыдущую страницу $('.order form input:submit[name="toprev"]').click(function(){ var act = this.form.action; this.form.action = act + ( act.indexOf( '\?' ) > -1 ? '&' : '?' ) + 'toprev=1'; this.form.submit(); return false; }); /* Настройки галереи изображений $.nyroModalSettings({ // из всех элементов с атрибут rel="gallery" будем создавать галерею gallery: 'gallery', // Включаем прокрутку с последнего изображения на первое galleryLoop: true });*/ // Увеличение изображение при клике на него и открытие галереи изображений $('.goodsDataMainImage a, .goodsDataMainImageZoom a').click(function(){ // Идентификатор главной картинки var goodsImageId = $('.goodsDataMainImage input').attr("rel"), // Маленькое изображение, по которому на самом деле будем кликать goodsImageIconElement = $('.goodsDataMainImagesIcon input[rel="'+goodsImageId+'"]').parent().find('a'); // Для иконки изображения запустим галерею goodsImageIconElement.nyroModalManual(); return false; }); // Добавление товара в корзину через ajax $('.goodsDataForm, .goodsToCartFromCompareForm, .goodsListForm').submit(function(){ $(this).nyroModalManual({ formIndicator: 'ajax_q', // Value added when a form is sent minWidth: 450, // Minimum width minHeight: 140, // Minimum height gallery: null // Gallery name if provided }); return false; }); // Изменение главного изображения товара при нажатии на миниатюру $('.goodsDataMainImagesIcon a').click(function(){ // Путь к среднему изображению var MediumImageUrl = $(this).find('img').attr('rel'), // Главное изображение, в которое будем вставлять новое изображение MainImage = $('.goodsDataMainImage img'), // В этом объекте хранится идентификатор картинки главного изображения для коректной работы галереи изображений MainImageIdObject = $('.goodsDataMainImage input'), // Получаем идентификатор этого изображения из соседнего input поля GoodsImageIconId = $(this).parent().find('input').attr("rel"); // Изменяем главное изображение MainImage.attr('src',MediumImageUrl); // Изменяем идентификатор главного изображения MainImageIdObject.attr("rel",GoodsImageIconId); return false; }); // Функция собирает свойства в строку, для определения модификации товара function getSlugFromGoodsDataFormModificationsProperties(obj) { var properties = new Array(); $(obj).each(function(i){ properties[i] = parseInt($(this).val()); }); return properties.sort(function(a,B){return a - b}).join('_'); } var // Запоминаем поля выбора свойств, для ускорения работы со значениями свойств goodsDataProperties = $('form.goodsDataForm select[name="form[properties][]"]'), // Запоминаем блоки с информацией по модификациям, для ускорения работы goodsDataModifications = $('div.goodsDataMainModificationsList'); // Обновляет возможность выбора свойств модификации, для отключения возможности выбора по характеристикам модификации которой не существует. function updateVisibility (y) { // Проверяем в каждом соседнем поле выбора модификаций, возможно ли подобрать модификацию для указанных свойств goodsDataProperties.each(function(j){ // Если мы сравниваем значения свойства не с самим собой, а с другим списком значений свойств if( j != y ) { // Проходим по всем значениям текущего свойства модификации товара $(this).find('option').each(function(){ // Записываем временный массив свойств, которые будем использовать для проверки существования модификации var checkProperties = new Array(); $(goodsDataProperties).each(function(i){ checkProperties[i] = parseInt($(this).val()); }); // Пытаемся найти модификацию соответствующую выбранным значениям свойств checkProperties[j] = parseInt($(this).attr('value')); // Собираем хэш определяющий модификацию по свойствам slug = checkProperties.sort(function(a,B){return a - b}).join('_'); // Ищем модификацию по всем выбранным значениям свойств товара. Если модификации нет в возможном выборе, отмечаем потенциальное значение выбора как не доступное для выбора, т.к. такой модификации нет. if(!goodsDataModifications.filter('[rel="'+slug+'"]').length) { $(this).attr('disabled', true); // Если выбрав данное значение свойства товара можно подобрать модификацию, то выделяем вариант выбора как доступный. } else { $(this).attr('disabled', false); } }); } }); } // Обновляем возможность выбора модификации товара по свойствам. Для тех свойств, выбор по которым не возможен, отключаем такую возможность. // Проверяем возможность выбора на всех полях кроме первого, чтобы отключить во всех остальных варианты, которые не возможно выбрать updateVisibility (0); // Проверяем возможность выбора на всех полях кроме второго, чтобы в первом поле так же отключилась возможность выбора не существующих модификаций updateVisibility (1); //var goodsDataProperties = $('.goodsDataForm [name="form[properties][]"]'); // Изменение цены товара при изменении у товара свойства для модификации goodsDataProperties.each(function(){ $(this).change(function(){ var slug = getSlugFromGoodsDataFormModificationsProperties(goodsDataProperties), modificationBlock = $('.goodsDataMainModificationsList[rel="'+slug+'"]'), modificationId = parseInt(modificationBlock.find('[name="id"]').val()), modificationArtNumber = modificationBlock.find('[name="art_number"]').val(), modificationPriceNow = parseFloat(modificationBlock.find('[name="price_now"]').val()), modificationPriceNowFormated = modificationBlock.find('.price_now_formated').html(), modificationPriceOld = parseFloat(modificationBlock.find('[name="price_old"]').val()), modificationPriceOldFormated = modificationBlock.find('.price_old_formated').html(), modificationRestValue = parseFloat(modificationBlock.find('[name="rest_value"]').val()), modificationDescription = modificationBlock.find('.description').html(), modificationMeasureId = parseInt(modificationBlock.find('[name="measure_id"]').val()), modificationMeasureName = modificationBlock.find('[name="measure_name"]').val(), modificationMeasureDesc = modificationBlock.find('[name="measure_desc"]').val(), modificationMeasurePrecision = modificationBlock.find('[name="measure_precision"]').val(), modificationIsHasInCompareList= modificationBlock.find('[name="is_has_in_compare_list"]').val(), goodsModificationId = $('.goodsDataMainModificationId'), goodsPriceNow = $('.goodsDataMainModificationPriceNow'), goodsPriceOld = $('.goodsDataMainModificationPriceOld'), goodsAvailable = $('.goodsDataMainModificationAvailable'), goodsAvailableTrue = goodsAvailable.find('.available-true'), goodsAvailableFalse = goodsAvailable.find('.available-false'), goodsArtNumberBlock = $('.goodsDataMainModificationArtNumber'), goodsArtNumber = goodsArtNumberBlock.find('span'); goodsCompareAddButton = $('.goodsDataCompareButton.add'); goodsCompareDeleteButton = $('.goodsDataCompareButton.delete'); goodsModDescriptionBlock = $('.goodsDataMainModificationsDescriptionBlock'); // Изменяем данные товара для выбранных параметров. Если нашлась выбранная модификация if(modificationBlock.length) { // Цена товара goodsPriceNow.html(modificationPriceNowFormated); // Старая цена товара if(modificationPriceOld>modificationPriceNow) { goodsPriceOld.html(modificationPriceOldFormated); } else { goodsPriceOld.html(''); } // Есть ли товар есть в наличии if(modificationRestValue>0) { goodsAvailableTrue.show(); goodsAvailableFalse.hide(); // Если товара нет в наличии } else { goodsAvailableTrue.hide(); goodsAvailableFalse.show(); } // Если товар есть в списке сравнения if(modificationIsHasInCompareList>0) { goodsCompareAddButton.hide(); goodsCompareDeleteButton.show(); // Если товара нет в списке сравнения } else { goodsCompareAddButton.show(); goodsCompareDeleteButton.hide(); } // Покажем артикул модификации товара, если он указан if(modificationArtNumber.length>0) { goodsArtNumberBlock.show(); goodsArtNumber.html(modificationArtNumber); // Скроем артикул модификации товара, если он не указан } else { goodsArtNumberBlock.hide(); goodsArtNumber.html(''); } // Описание модификации товара. Покажем если оно есть, спрячем если его у модификации нет if(modificationDescription.length > 0) { goodsModDescriptionBlock.show().html('<div>' + modificationDescription + '</div>'); } else { goodsModDescriptionBlock.hide().html(); } // Идентификатор товарной модификации goodsModificationId.val(modificationId); } else { // Отправим запись об ошибке на сервер sendError('no modification by slug '+slug); alert('К сожалению сейчас не получается подобрать модификацию соответствующую выбранным параметрам.'); } }); }); var // Минимальное значение цены для фильтра priceFilterMinAvailable = parseInt($('.goodsFilterPriceRangePointers .min').text()) // Максимальное значение цены для фильтра ,priceFilterMaxAvailable = parseInt($('.goodsFilterPriceRangePointers .max').text()) // Максимальное значение цены для фильтра ,priceSliderBlock = $('#goods-filter-price-slider') // Поле ввода текущего значения цены "От" ,priceInputMin = $( "#goods-filter-min-price" ) // Поле ввода текущего значения цены "До" ,priceInputMax = $( "#goods-filter-max-price" ) // Блок с кнопкой, которую есть смысл нажимать только тогда, когда изменялся диапазон цен. ,priceSubmitButtonBlock = $( ".goodsFilterPriceSubmit" ) ; // Изменяет размер ячеек с ценой, т.к. у них нет рамок, есть смысл менять размеры полей ввода, чтобы они выглядили как текст function priceInputsChangeWidthByChars() { // Если есть блок указания минимальной цены if(priceInputMin.length) { priceInputMin.css('width', (priceInputMin.val().length*7 + 30) + 'px'); priceInputMax.css('width', (priceInputMax.val().length*7 + 30) + 'px'); } } // Слайдер, который используется для удобства выбора цены priceSliderBlock.slider({ range: true, min: priceFilterMinAvailable, max: priceFilterMaxAvailable, values: [ parseInt($('#goods-filter-min-price').val()) ,parseInt($('#goods-filter-max-price').val()) ], slide: function( event, ui ) { priceInputMin.val( ui.values[ 0 ] ); priceInputMax.val( ui.values[ 1 ] ); priceSubmitButtonBlock.show(); priceInputsChangeWidthByChars(); } }); // При изменении минимального значения цены priceInputMin.keyup(function(){ var newVal = parseInt($(this).val()); if(newVal < priceFilterMinAvailable) { newVal = priceFilterMinAvailable; } priceSliderBlock.slider("values", 0, newVal); priceSubmitButtonBlock.show(); priceInputsChangeWidthByChars(); }); // При изменении максимального значения цены priceInputMax.keyup(function(){ var newVal = parseInt($(this).val()); if(newVal > priceFilterMaxAvailable) { newVal = priceFilterMaxAvailable; } priceSliderBlock.slider("values", 1, newVal); priceSubmitButtonBlock.show(); priceInputsChangeWidthByChars(); }); // Обновить размеры полей ввода диапазона цен priceInputsChangeWidthByChars(); /* Кнопка добавления товара на сравнение товаров $('.goodsDataCompareButton').click(function(){ window.location.href = $(this).attr('rel') + ($(this).attr('rel').indexOf( '\?' ) > -1 ? '&' : '?') + 'id='+ $('.goodsDataMainModificationId').val()+ '&from='+ $('input[name="form[goods_from]"]').val(); return false; });*/ // Добавление/удаление товара на сравнение/избранное через ajax $('.add_to_compare_small, .add_to_wishlist_small').click(function(){ // Объект ссылки, по которой кликнули var a = $(this) ,addUrl = a.attr('data-action-add-url') ,delUrl = a.attr('data-action-delete-url') ,addTitle = a.attr('data-action-add-title') ,delTitle = a.attr('data-action-delete-title') ,isAdd = a.attr('data-action-is-add') ,aText = a.parent().find('.add_to_wishlist_small_text, .add_to_compare_small_text') requestUrl = a.attr('href') ; // Если в ссылке присутствует идентификатор, который мы можем узнать только вытащив его с текущей страницы if( /GET_GOODS_MOD_ID_FROM_PAGE/.test(requestUrl)) { requestUrl = requestUrl.replace(new RegExp('GET_GOODS_MOD_ID_FROM_PAGE'), $('.goodsDataMainModificationId').val()); } // Если есть информация о том какие URL адреса будут изменены, то можено не перегружать страницу и сделать запрос через ajax if(addUrl && delUrl) { $.ajax({ type : "POST", dataType: 'json', cache : false, url : requestUrl, data : { 'ajax_q': 1 }, success: function(data) { if('ok' == data.status) { if(isAdd == 1) { var from = addUrl ,to = delUrl ,newIsAddStatus = 0 ,newTitle = delTitle ? delTitle : '' ; a.addClass('added'); } else { var from = delUrl ,to = addUrl ,newIsAddStatus = 1 ,newTitle = addTitle ? addTitle : '' ; a.removeClass('added'); } // Если указано, что изменилось число товаров на сравнении if(typeof(data.compare_goods_count) != 'undefined') { // Блок информации о том, что есть товары на сравнении var compareBlock = $('#compareInfoBlock'); // Если на сравнении больше нет товаров if(0 < data.compare_goods_count) { compareBlock.show(); // Если на сравнении есть новые товары } else { compareBlock.hide(); } // Указываем информацию о новом количестве товаров на сравнении compareBlock.find('.nb_goods').text( data.compare_goods_count + ( typeof(genWordEnd) == 'function' ? ' товар' + genWordEnd(data.compare_goods_count, "", "а", "ов") : '') ); } // Обновляем ссылку, на которую будет уходить запрос и информацию о ней a.attr('href', a.attr('href').replace(new RegExp(from), to)) .attr('title', newTitle) .attr('data-action-is-add', newIsAddStatus); // Если рядом с ссылкой в виде круга есть текстовая надпись с описанием действия if(aText.length) { aText.text(aText.attr(isAdd == 1 ? 'data-action-text-delete' : 'data-action-text-add')); } // Если есть функция, которая отображает сообщения пользователю if(typeof(noty) == "function") { noty({ text:data.message ,layout:"center" ,type:"success" ,textAlign:"center" ,easing:"swing" ,animateOpen:{"height":"toggle"} ,animateClose:{"opacity":"hide"} ,speed:"500" ,timeout:"3000" ,closable: false ,modal: false ,dismissQueue: true ,onClose: true ,killer: true }); } } else if('error' == data.status) { // Если есть функция, которая отображает сообщения пользователю if(typeof(noty) == "function") { noty({ text:data.message ,layout:"center" ,type:"error" ,textAlign:"center" ,easing:"swing" ,animateOpen:{"height":"toggle"} ,animateClose:{"opacity":"hide"} ,speed:"500" ,timeout:"3000" ,closable: false ,modal: false ,dismissQueue: true ,onClose: true ,killer: true }); } } } }); return false; } }); // Сравнение товаров. Увеличение изображение при клике на ссылку увеличения и открытие галереии с изображениями этого товара $('.CompareGoodsImageZoom').click(function(){ // Галлерея фотографий для данной модификации товаров var galleryBlock = $('.galleryBlock' + $(this).attr('rel')), // Главное изображение товара, которое сейчас стоит у товара galleryMainImage = $('.CompareGoodsImageMain' + $(this).attr('rel')), // Изображение по которому нужно кликнуть в галлерее изображений ImageIngallery = galleryBlock.find('.CompareGoodsImageGallery'+galleryMainImage.attr('rel')); // Запускаем галлерею изображений от изображения товара, чтобы если например кликнули по гайке, то и открылись гайка, а не еще какой-либо изображение этого товара ImageIngallery.nyroModalManual({ gallery: 'gallery' + $(this).attr('rel') }); return false; }); // Сравнение товаров. Инвертирование свойств для сравнения товара $('.CompareCheckbox.invert').click(function(){ var checked = true, checkboxes = $('.CompareCheckbox:not(.invert)'); checkboxes.each(function(){ if($(this).attr('checked')) { checked = false; return false; } }); checkboxes.each(function(){ $(this).attr('checked', checked); }); $(this).attr('checked', checked); }); // Сравнение товаров. Скрытие характеристик товара, которые выделил пользователь $('.CompareGoodsHideSelected').click(function(){ $('.CompareGoodsTableTbodyComparisonLine').each(function(){ var CheckedCheckbox = $(this).find('.CompareCheckbox:checked:not(.invert)'); if(CheckedCheckbox.length>0) { $(this).hide(); } }); // отменяем выделение характеристик товаров $('.CompareCheckbox').attr('checked',false); return false; }); // Сравнение товаров. Отображение скрытых характеристик товара $('.CompareGoodsShowAll').click(function(){ $('.CompareGoodsTableTbodyComparisonLine:hidden').show(); return false; }); // Сравнение товаров. Верхняя навигация изменение фильтра на отображение всех характеристик товаров $('.CompareGoodsTableFilterShowAll').click(function(){ $('.CompareGoodsTableFilterSelected').removeClass('CompareGoodsTableFilterSelected'); $('.CompareGoodsTableTbodyComparisonLine:hidden').show(); $(this).addClass('CompareGoodsTableFilterSelected'); return false; }); // Сравнение товаров. Фильтр в верхней навигации. Отображение только различающихся характеристик товара $('.CompareGoodsTableFilterShowOnlyDifferent').click(function(){ $('.CompareGoodsTableFilterSelected').removeClass('CompareGoodsTableFilterSelected'); $('.CompareGoodsTableTbodyComparisonLine:not(.same)').show(); $('.CompareGoodsTableTbodyComparisonLine.same').hide(); $(this).addClass('CompareGoodsTableFilterSelected'); return false; }); // Сравнение товаров. При наведении на строку сравнения, она выделяется цветом $('.CompareGoodsTableTbodyComparisonLine').hover( function () { $(this).addClass('hover'); }, function () { $(this).removeClass('hover'); } ); // При клике по строке выделяем свойство $('.CompareGoodsTableTbodyComparisonLine td:not(.ceil1)').click(function(){ var CompareCheckbox = $(this).parent().find('.CompareCheckbox'); if(CompareCheckbox.attr('checked')) { CompareCheckbox.attr('checked', false); } else { CompareCheckbox.attr('checked', true); } }); function compareGetVars () { return new Array( $('.CompareGoodsTableTbody tr:first td').length - 1, parseInt($('.CompareGoodsTableTbody tr:first td:visible:not(.ceil1)').attr('class').replace(new RegExp('noBorderBottom compare\-td compare\-td\-'), '')), parseInt($('.CompareGoodsTableTbody tr:first td:visible:last').attr('class').replace(new RegExp('noBorderBottom compare\-td compare\-td\-'), '')) ); } // Прокрутка списка сравнения вправо $('.CompareGoodsTableNext').click(function(){ // Определяем используемые поля var data = compareGetVars(); // Изменяем их если это возможно. if(data[0] > data[2]) { $('.compare-td-' + data[1]).hide(); $('.compare-td-' + (data[2] + 1)).show(); if((data[2] + 1) >= data[0]) { $(this).find('a').addClass('disable'); } if(data[1] + 1 != 1) { $('.CompareGoodsTablePrev a').removeClass('disable'); } } return false; }); // Прокрутка списка сравнения влево $('.CompareGoodsTablePrev').click(function(){ // Определяем используемые поля var data = compareGetVars(); // Изменяем их если это возможно. if(1 < data[1]) { $('.compare-td-' + (data[1] - 1)).show(); $('.compare-td-' + data[2]).hide(); if((data[1] - 1) <= 1) { $(this).find('a').addClass('disable'); } if(data[2] - 1 != data[0]) { $('.CompareGoodsTableNext a').removeClass('disable'); } } return false; }); // Форма регистрации нового пользователя, действие ссылки "показать пароль" $('.clientForm .showPass').click(function(){ ChangePasswordFieldType(this, $('#sites_client_pass')); return false; }); // Форма регистрации нового пользователя, при оформлении заказа $('.OrderShowPass').click(function(){ ChangePasswordFieldType(this, $('#contactPassWord')); return false; }); /* При вводе пароля с caps lockом, покажет блок с сообщением для пользователя $('#sites_client_pass, #contactPassWord').capslock({ caps_lock_on:function(){$("#caps_lock").show();}, caps_lock_off:function(){$("#caps_lock").hide();} });*/ // При оформлении заказа дадим возможность зарегистрироваться пользователю $('#contactWantRegister').click(function(){ if($(this).attr("checked")) { $('.contactRegisterNeedElement').show(); $('#contactEmail, #contactPassWord').addClass('required'); } else { $('.contactRegisterNeedElement').hide(); $('#contactEmail, #contactPassWord').removeClass('required'); } }); // Добавление отзыва о товаре. Рейтинг if(typeof($('.goodsDataOpinionTableRating').stars) == "function" ) { $('.goodsDataOpinionTableRating').stars({ inputType: "input", split: 2, captionEl: $(".goodsDataOpinionMsg"), cancelShow: false }); } // Список отзывов о товаре. Ссылка на отображение формы для добавление отзыва о товаре $('.goodsDataOpinionShowAddForm').click(function(){ if(0 == $('#goodsDataOpinionAddBlock:visible').length) { $('#goodsDataOpinionAddBlock').show('blind'); } else { $('#goodsDataOpinionAddBlock').hide('blind'); return false; } }); // Добавление отзыва о товаре. кнопка reset скрывающая форму добавления отзыва о товаре $('.goodsDataOpinionFormReset').click(function(){ $('#goodsDataOpinionAddBlock').hide('blind'); return false; }); // Иконка для обновления изображение капчи $('.goodsDataOpinionCaptchaRefresh').click(function(){ RefreshImageAction(this,1,1); $('.goodsDataOpinionCaptchaImg').attr('src',$('.goodsDataOpinionCaptchaImg').attr('src')+'&rand'+Math.random(0,10000)); return false; }); // Фильтры по товарам. При нажании на какую либо характеристику или свойство товара происходит фильтрация товаров $('.contentTbodySearchFilterBlock input').click(function(){ $(this)[0].form.submit(); }); // Действия при выборе варианта доставки на этапе оформления заказа $('.deliveryRadio').click(function(){ // Если текущая выделенная зона доставки не относится к выбранному варианту доставки, снимаем выделение с зоны доставки if($('.deliveryZoneRadio:checked').attr('deliveryid') != $(this).val()) { $('.deliveryZoneRadio:checked').click().attr('checked', false); } }); // Действия при выборе зоны внутри варианта доставки на этапе оформления заказа $('.deliveryZoneRadio').click(function(){ var deliveryId = $(this).attr('deliveryid') ,deliveryZonePrice = $(this).parent().find('.deliveryZonePrice') ,deliveryTbody = $('.orderStageDeliveryListTable tbody[rel="' + deliveryId + '"]') ,deliveryBlock = deliveryTbody.find('#deliveryId' + deliveryId) ,deliveryZonePriceBlock = deliveryTbody.find('.orderStageDeliveryZonePrice') ,deliveryDefaultPriceBlock = deliveryTbody.find('.orderStageDeliveryDefaultPrice') ; // Если этот пункт уже выбран, при повторном клике пользователь видимо хочет снять выделение зоны доставки if('true' == $(this).attr('rel')) { $(this).attr('checked', false); $(this).attr('rel', 'false'); // Показываем цену по умолчанию deliveryDefaultPriceBlock.show(); // Скрываем цену образованную от зоны deliveryZonePriceBlock.hide(); // Отмечаем у всех радио баттонов зон доставки свойство говорящее что они не отмечены } else { $('.deliveryZoneRadio').attr('rel', 'false'); $(this).attr('rel', 'true'); // Показываем цену по умолчанию deliveryDefaultPriceBlock.hide(); // Скрываем цену образованную от зоны deliveryZonePriceBlock.show().html(deliveryZonePrice.html()); // Выделяем вариант доставки к которому относится зона доставки deliveryBlock.attr('checked', true); } }); $("#deliveryConvenientDate").datepicker({ dayNames : ['Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота', 'Воскресенье'], dayNamesMin : ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб' ], closeText : 'Готово', currentText : 'Сегодня' , duration : '', monthNames : ['Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Окрябрь','Ноябрь','Декабрь'], monthNamesShort : ['Янв','Фев','Март','Апр','Май','Июнь','Июль','Авг','Сен','Окт','Ноя','Дек'], yearRange : "-6:+6", dateFormat : 'dd.mm.yy', minDate : new Date(), firstDay : 1 }); }); // Быстрый заказ function quickorder(formSelector) { // Находим форму, которую отправляем на сервер, для добавления товара в корзину var formBlock = $($(formSelector).get(0)); // Проверка на существование формы отправки запроса на добавление товара в корзину if(1 > formBlock.length || formBlock.get(0).tagName != 'FORM') { alert('Не удалось найти форму добавления товара в корзину'); return false; } // Получаем данные формы, которые будем отправлять на сервер var formData = formBlock.serializeArray(); // Сообщаем серверу, что мы пришли через ajax запрос formData.push({name: 'ajax_q', value: 1}); // Так же сообщим ему, что нужно сразу отобразить форму быстрого заказа formData.push({name: 'fast_order', value: 1}); // Аяксом добавляем товар в корзину и вызываем форму быстрого заказа товара $.ajax({ type : "POST", cache : false, url : formBlock.attr('action'), data : formData, success: function(data) { $.fancybox({ content : data, // При изменении размера окна изменяем размер окна оформления заказа onUpdate : function(){ var w = $(window).width()*0.8; if(w < 800) { // Автоматический ресайз внутреннего блока fancybox-а $('.fancybox-inner').css('width', 'auto'); // Изменяем размер fancybox окна $('.fancybox-wrap').css({'width': w + 'px'}); } return false; } }); setTimeout(function(){$.fancybox.update();}, 500); } }); return false; }
#3 Ser
Отправлено 11 Апрель 2014 - 17:40
Castiel (11 Апрель 2014 - 16:55) писал:
Здравствуйте, проблема в файле main.js
Возможно вы добавили какие то скрипты которые конфликтуют со стандартными или удалили важные функции.
Стандартный файл main.js для шаблона Весна
Возможно вы добавили какие то скрипты которые конфликтуют со стандартными или удалили важные функции.
Стандартный файл main.js для шаблона Весна
Скрытый текст
// Меню-аккардеон. Каталог jQuery(document).ready(function () { jQuery("ul.accordion li.parent").each(function(){ jQuery(this).append('<em class="open-close"> </em>'); }); jQuery('ul.accordion').accordion(); jQuery("ul.accordion li.active").each(function(){ jQuery(this).children().next("ul").css('display', 'block'); }); }); // Инициализация табов на странице товара function initTabs() { // Блок в котором находятся табы var tabBlock = $('#contents'); if(!tabBlock.length) { return false; } // По умолчанию делаем отметку о том что активного таба не найдено var isFind = 0; tabBlock.find('#tabs a').each(function(i){ // Если нашёлся активный там if($(this).hasClass('active')) { // Инициализируем найденный таб $(this).click(); // Ставим отметку, о том что не нужно инициализировать первый таб на странице isFind = 1; } }); // Если не найдено ни одного таба с отметкой о том что он активен if(!isFind) { // Ставим активным первый таб на странице. tabSwitch(1); } // Проверяет хэш и если по нему была открыта вкладка, то эта функция автоматически откроет её. checkTabHash(); // Если текущий адрес страницы предполагает добавление отзыва if('#goodsDataOpinionAdd' == document.location.hash) { $('#goodsDataOpinionAddBlock').show(); } // Биндим изменение хэша - проверка какой таб нужно открыть. $(window).bind('hashchange', function() { checkTabHash(); }); } // Проверяет хэш, переданый пользователем и открывает соответствующий раздел function checkTabHash() { // Определяем текущий хэш страницы var hash = window.location.hash.substr(1); if(hash == 'goodsDataOpinionAdd') { hash = 'show_tab_4'; } if(!hash.length || hash.indexOf('show_tab_') == -1) { return false; } // Открываем тот таб, который был указан в hash-е tabSwitch(hash.replace("show_tab_", '')) } // Выбор вкладки на странице товара function tabSwitch(nb) { var tabBlock = $('#contents'); tabBlock.find('#tabs a').removeClass('active'); tabBlock.find('div.tab-content').hide(); $('#tab_' + nb).addClass('active'); $('#content_' + nb).show(); if('#goodsDataOpinionAdd' != document.location.hash) { // Записываем в хэш информацию о том какой таб сейчас открыт, для возможности скопировать и передать ссылку с открытым нужным табом document.location.hash = "#show_tab_" + nb; } } // Инициализируем табы на странице $(function() { initTabs(); }); $(function(){ var $container = $('.product-list, .product-list2'); var lastPage = 1; // Скрываем навигацию по умолчанию $('.pagination').hide(); $container.infinitescroll({ navSelector : '.infinitescroll-pages', // класс элемента постраничной навигации для бесконечного скрола nextSelector : '.infinitescroll-pages a', // класс элемента постраничной навигации, ссылка на следующую страницу itemSelector : '.prod_hold, .category-info', // класс элементов, которые будем извлекать loading: { msgText: 'Пожалуйста подождите...', finishedMsg: 'Больше нет товаров.', img: zoomloaderPath ? zoomloaderPath : '/zoomloader.gif' } }, function(newElements) { var $newElems = $( newElements ).css({ opacity: 0 }); $newElems.imagesLoaded(function(){ $newElems.animate({ opacity: 1 }); $container.masonry( 'appended', $newElems, true ); }); lastPage++; // если это последняя страница, завершаем работу if(lastPage >= (infiniteScrollLastPage ? infiniteScrollLastPage : 1) ){ $container.infinitescroll('pause'); } } ); }); // Возвращает правильное окончание для слова function genWordEnd(num, e, m, mm) { // Если забыли указать окончания if(typeof (e) == "undefined") { e = ''; } if(typeof (m) == "undefined") { e = 'а'; } if(typeof (mm) == "undefined"){ e = 'oв'; } // Если передали пустую строку, вместо цифры if(0 == num.length) { num = 0; } // Превращаем цифру в правильный INT num = GetSum(num).toString(); // Получаем последний символ цифры ch1 = num.substring(num.length-1); // Получаем последний символ цифры ch2 = num.length == 1 ? 0 : num.substring(num.length-2, num.length-1); // Если последняя цифра - 1, вернем единственное число if(ch2!=1 && ch1==1) {return e;} // Если последняя цифра - от 2 до 4х , вернем множественное чило из массива с индексом 2 else if(ch2!=1 && ch1>1 && ch1<=4) {return m;} // Если последняя цифра - от 5 до 0 , вернем множественное чило из массива с индексом 3 else if(ch2==1 || ch1>4 || ch1==0) {return mm;} } $(document).ready(function(){ $('#column-left .box-heading').click(function(){ var vis = $('#column-left').find('.box-content'); if ($(this).hasClass('up')) { vis.fadeOut(); $(this).removeClass('up'); } else { vis.fadeIn(); $(this).addClass('up'); } }); $('.qty-plus').click(function(){ var quantity = $(this).parent().find('.quantity') ,currentVal = parseInt(quantity.val()) ; if (!isNaN(currentVal)){ quantity.val(currentVal + 1); quantity.trigger('keyup'); } return false; }); $('.qty-minus').click(function(){ var quantity = $(this).parent().find('.quantity') ,currentVal = parseInt(quantity.val()) ; if (!isNaN(currentVal) && !(currentVal <= 1) ){ quantity.val(currentVal - 1); quantity.trigger('keyup'); } return false; }); $(window).load(function() { $('.flexslider').flexslider({ animation: "fade", pauseOnHover: true, touch: true, animationSpeed: 1300, slideshowSpeed: 6500, smoothHeight: false, controlNav: false, directionNav: true }); }); // hide #back-top first $("#back-top").hide(); // fade in #back-top $(window).scroll(function () { if ($(this).scrollTop() > 100) { $('#back-top').fadeIn(); } else { $('#back-top').fadeOut(); } }); // scroll body to 0px on click $('#back-top img').click(function () { $('body,html').animate({ scrollTop: 0 }, 800); return false; }); $("#toggle_switch").click(function () { $('#togglerone').slideToggle(1000); if ($(this).hasClass('swap')) { $(this).removeClass("swap"); // Удаляем из cookie информацию о том, что пользователь скрыл шапку сайта deleteCookie("hide_header", {path: '/'}); } else { $(this).addClass("swap"); // Ставим в cookie информацию о том, что пользователь скрыл шапку сайта setCookie("hide_header", 1, {path: '/'}); } }); // Если шапка скрыта пользователем if(getCookie("hide_header")) { $('#togglerone').hide(); $('#toggle_switch').addClass("swap"); } }); // Работа с cookie файлами. // Получение переменной из cookie function getCookie(name) { var matches = document.cookie.match(new RegExp( "(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)" )); return matches ? decodeURIComponent(matches[1]) : undefined; } // Установка переменной в cookie function setCookie(name, value, options) { options = options || {}; var expires = options.expires; if (typeof expires == "number" && expires) { var d = new Date(); d.setTime(d.getTime() + expires*1000); expires = options.expires = d; } if (expires && expires.toUTCString) { options.expires = expires.toUTCString(); } value = encodeURIComponent(value); var updatedCookie = name + "=" + value; for(var propName in options) { updatedCookie += "; " + propName; var propValue = options[propName]; if (propValue !== true) { updatedCookie += "=" + propValue; } } document.cookie = updatedCookie; } // Удаление переменной из cookie function deleteCookie(name, options ) { options = options || {}; options.expires = -1; setCookie(name, "", options) } // Отправляет ошибку на сервер, для того чтобы служба тех поддержки могла разобраться в проблеме как можно быстрее. function sendError (desc, page, line) { var img=document.createElement('img'); img.src = 'http://storeland.ru/error/js?desc='+encodeURIComponent(desc)+'&page='+encodeURIComponent(window.location)+'&line=0'; img.style.position = 'absolute'; img.style.top = '-9999px'; try { document.getElementsByTagName('head').appendChild(img) } catch (e){} return false; } // Форматирует цену function number_format(number,decimals,dec_point,thousands_sep){var n=number,prec=decimals;var toFixedFix=function(n,prec){var k=Math.pow(10,prec);return(Math.round(n*k)/k).toString();};n=!isFinite(+n)?0:+n;prec=!isFinite(+prec)?0:Math.abs(prec);var sep=(typeof thousands_sep==='undefined')?',':thousands_sep;var dec=(typeof dec_point==='undefined')?'.':dec_point;var s=(prec>0)?toFixedFix(n,prec):toFixedFix(Math.round(n),prec);var abs=toFixedFix(Math.abs(n),prec);var _,i;if(abs>=1000){_=abs.split(/\D/);i=_[0].length%3||3;_[0]=s.slice(0,i+(n<0))+ _[0].slice(i).replace(/(\d{3})/g,sep+'$1');s=_.join(dec);}else{s=s.replace('.',dec);} var decPos=s.indexOf(dec);if(prec>=1&&decPos!==-1&&(s.length-decPos-1)<prec){s+=new Array(prec-(s.length-decPos-1)).join(0)+'0';} else if(prec>=1&&decPos===-1){s+=dec+new Array(prec).join(0)+'0';} return s;} // Превращает поле пароля в текстовое поле и обратно // @LinkObject - ссылка по которой кликнули // @InputObject - объект у которого нужно изменить тип поля function ChangePasswordFieldType (LinkObject, InputObject) { var // Ссылка по которой кликнули LObject = $(LinkObject), // Объект у которого изменяем тип с password на text IObject = $(InputObject), // Старый текст ссылки txtOld = LObject.text(), // Новый текст ссылки txtNew = LObject.attr('rel'); // Если объекты не получены, завершим работу функции if( LObject.length==0 || IObject.length==0 ) { return false; } // Изменяем у ссылки текст со старого на новый LObject.html(txtNew); // Старый текст ссылки сохраняем в атрибуте rel LObject.attr('rel', txtOld); // Изменяем тип input поля if(IObject[0].type == 'text') { IObject[0].type = 'password'; } else { IObject[0].type = 'text'; } } // Крутит изображение при обновлении картинки защиты от роботов function RefreshImageAction(img,num,cnt) { if(cnt>13) { return false; } $(img).attr('src', $(img).attr('rel') + 'icon/refresh/' + num + '.gif'); num = (num==6)?0:num; setTimeout(function(){RefreshImageAction(img, num+1, cnt+1);}, 50); } $(document).ready(function(){ //$('#tabs a').tabs(); /* Валидация формы на странице оформления заказа, а так же формы на страницы связи с администрацией $('.order form, .feedbackForm, .clientForm, .goodsDataOpinionAddForm').submit(function(){ if($(this).valid()) { // Кнопка отправки формы SubmitButton = $(this).find('input:submit, button:submit'); // Если кнопку уже нажали, видимо отправка формы производилась по нажатию на кнопку enter, не допускаем этого. if($(SubmitButton.get(0)).attr('disabled')) { return false; } // Устанавливаем на кнопку отправки формы блокировку повторной оптравки SubmitButton.attr('disabled', true); // Через 10 секунд блокировка отправки формы снимается. setTimeout('SubmitButton.attr("disabled", false);', 10000); } }).validate();*/ // Кнопки на сайте если подгружен модуль Jquery.UI if(typeof($('button.submit, button:submit, input:submit, input.button').button) == "function" ) { $('button.submit, button:submit, input:submit, input.button').button(); } // Валидация формы на странице оформления заказа, а так же формы на страницы связи с администрацией $("#myform, .feedbackForm, .clientForm, #quickform").validate({ rules: { reg_name: "required" } }); // Отправка формы по Ctrl+Enter $('form').bind('keypress', function(e){ if((e.ctrlKey) && ((e.which==10)||(e.which==13))) {$(this).submit();} // Отправка данных формы по нажатию на Enter в случае если курсор находится в input полях (В некоторых браузерах при нажатии по enter срабатывает клик по первому submit полю, которое является кнопкой назад. Для этого написан этот фикс) }).find('input').bind('keypress', function(e){ if(((e.which==10)||(e.which==13))) { try{$(this.form).submit();} catch(e){} return false; } }); // В форме оформления заказа при клике на кнопку назад просто переходим на предыдущую страницу $('.order form input:submit[name="toprev"]').click(function(){ var act = this.form.action; this.form.action = act + ( act.indexOf( '\?' ) > -1 ? '&' : '?' ) + 'toprev=1'; this.form.submit(); return false; }); /* Настройки галереи изображений $.nyroModalSettings({ // из всех элементов с атрибут rel="gallery" будем создавать галерею gallery: 'gallery', // Включаем прокрутку с последнего изображения на первое galleryLoop: true });*/ // Увеличение изображение при клике на него и открытие галереи изображений $('.goodsDataMainImage a, .goodsDataMainImageZoom a').click(function(){ // Идентификатор главной картинки var goodsImageId = $('.goodsDataMainImage input').attr("rel"), // Маленькое изображение, по которому на самом деле будем кликать goodsImageIconElement = $('.goodsDataMainImagesIcon input[rel="'+goodsImageId+'"]').parent().find('a'); // Для иконки изображения запустим галерею goodsImageIconElement.nyroModalManual(); return false; }); // Добавление товара в корзину через ajax $('.goodsDataForm, .goodsToCartFromCompareForm, .goodsListForm').submit(function(){ $(this).nyroModalManual({ formIndicator: 'ajax_q', // Value added when a form is sent minWidth: 450, // Minimum width minHeight: 140, // Minimum height gallery: null // Gallery name if provided }); return false; }); // Изменение главного изображения товара при нажатии на миниатюру $('.goodsDataMainImagesIcon a').click(function(){ // Путь к среднему изображению var MediumImageUrl = $(this).find('img').attr('rel'), // Главное изображение, в которое будем вставлять новое изображение MainImage = $('.goodsDataMainImage img'), // В этом объекте хранится идентификатор картинки главного изображения для коректной работы галереи изображений MainImageIdObject = $('.goodsDataMainImage input'), // Получаем идентификатор этого изображения из соседнего input поля GoodsImageIconId = $(this).parent().find('input').attr("rel"); // Изменяем главное изображение MainImage.attr('src',MediumImageUrl); // Изменяем идентификатор главного изображения MainImageIdObject.attr("rel",GoodsImageIconId); return false; }); // Функция собирает свойства в строку, для определения модификации товара function getSlugFromGoodsDataFormModificationsProperties(obj) { var properties = new Array(); $(obj).each(function(i){ properties[i] = parseInt($(this).val()); }); return properties.sort(function(a,B){return a - b}).join('_'); } var // Запоминаем поля выбора свойств, для ускорения работы со значениями свойств goodsDataProperties = $('form.goodsDataForm select[name="form[properties][]"]'), // Запоминаем блоки с информацией по модификациям, для ускорения работы goodsDataModifications = $('div.goodsDataMainModificationsList'); // Обновляет возможность выбора свойств модификации, для отключения возможности выбора по характеристикам модификации которой не существует. function updateVisibility (y) { // Проверяем в каждом соседнем поле выбора модификаций, возможно ли подобрать модификацию для указанных свойств goodsDataProperties.each(function(j){ // Если мы сравниваем значения свойства не с самим собой, а с другим списком значений свойств if( j != y ) { // Проходим по всем значениям текущего свойства модификации товара $(this).find('option').each(function(){ // Записываем временный массив свойств, которые будем использовать для проверки существования модификации var checkProperties = new Array(); $(goodsDataProperties).each(function(i){ checkProperties[i] = parseInt($(this).val()); }); // Пытаемся найти модификацию соответствующую выбранным значениям свойств checkProperties[j] = parseInt($(this).attr('value')); // Собираем хэш определяющий модификацию по свойствам slug = checkProperties.sort(function(a,B){return a - b}).join('_'); // Ищем модификацию по всем выбранным значениям свойств товара. Если модификации нет в возможном выборе, отмечаем потенциальное значение выбора как не доступное для выбора, т.к. такой модификации нет. if(!goodsDataModifications.filter('[rel="'+slug+'"]').length) { $(this).attr('disabled', true); // Если выбрав данное значение свойства товара можно подобрать модификацию, то выделяем вариант выбора как доступный. } else { $(this).attr('disabled', false); } }); } }); } // Обновляем возможность выбора модификации товара по свойствам. Для тех свойств, выбор по которым не возможен, отключаем такую возможность. // Проверяем возможность выбора на всех полях кроме первого, чтобы отключить во всех остальных варианты, которые не возможно выбрать updateVisibility (0); // Проверяем возможность выбора на всех полях кроме второго, чтобы в первом поле так же отключилась возможность выбора не существующих модификаций updateVisibility (1); //var goodsDataProperties = $('.goodsDataForm [name="form[properties][]"]'); // Изменение цены товара при изменении у товара свойства для модификации goodsDataProperties.each(function(){ $(this).change(function(){ var slug = getSlugFromGoodsDataFormModificationsProperties(goodsDataProperties), modificationBlock = $('.goodsDataMainModificationsList[rel="'+slug+'"]'), modificationId = parseInt(modificationBlock.find('[name="id"]').val()), modificationArtNumber = modificationBlock.find('[name="art_number"]').val(), modificationPriceNow = parseFloat(modificationBlock.find('[name="price_now"]').val()), modificationPriceNowFormated = modificationBlock.find('.price_now_formated').html(), modificationPriceOld = parseFloat(modificationBlock.find('[name="price_old"]').val()), modificationPriceOldFormated = modificationBlock.find('.price_old_formated').html(), modificationRestValue = parseFloat(modificationBlock.find('[name="rest_value"]').val()), modificationDescription = modificationBlock.find('.description').html(), modificationMeasureId = parseInt(modificationBlock.find('[name="measure_id"]').val()), modificationMeasureName = modificationBlock.find('[name="measure_name"]').val(), modificationMeasureDesc = modificationBlock.find('[name="measure_desc"]').val(), modificationMeasurePrecision = modificationBlock.find('[name="measure_precision"]').val(), modificationIsHasInCompareList= modificationBlock.find('[name="is_has_in_compare_list"]').val(), goodsModificationId = $('.goodsDataMainModificationId'), goodsPriceNow = $('.goodsDataMainModificationPriceNow'), goodsPriceOld = $('.goodsDataMainModificationPriceOld'), goodsAvailable = $('.goodsDataMainModificationAvailable'), goodsAvailableTrue = goodsAvailable.find('.available-true'), goodsAvailableFalse = goodsAvailable.find('.available-false'), goodsArtNumberBlock = $('.goodsDataMainModificationArtNumber'), goodsArtNumber = goodsArtNumberBlock.find('span'); goodsCompareAddButton = $('.goodsDataCompareButton.add'); goodsCompareDeleteButton = $('.goodsDataCompareButton.delete'); goodsModDescriptionBlock = $('.goodsDataMainModificationsDescriptionBlock'); // Изменяем данные товара для выбранных параметров. Если нашлась выбранная модификация if(modificationBlock.length) { // Цена товара goodsPriceNow.html(modificationPriceNowFormated); // Старая цена товара if(modificationPriceOld>modificationPriceNow) { goodsPriceOld.html(modificationPriceOldFormated); } else { goodsPriceOld.html(''); } // Есть ли товар есть в наличии if(modificationRestValue>0) { goodsAvailableTrue.show(); goodsAvailableFalse.hide(); // Если товара нет в наличии } else { goodsAvailableTrue.hide(); goodsAvailableFalse.show(); } // Если товар есть в списке сравнения if(modificationIsHasInCompareList>0) { goodsCompareAddButton.hide(); goodsCompareDeleteButton.show(); // Если товара нет в списке сравнения } else { goodsCompareAddButton.show(); goodsCompareDeleteButton.hide(); } // Покажем артикул модификации товара, если он указан if(modificationArtNumber.length>0) { goodsArtNumberBlock.show(); goodsArtNumber.html(modificationArtNumber); // Скроем артикул модификации товара, если он не указан } else { goodsArtNumberBlock.hide(); goodsArtNumber.html(''); } // Описание модификации товара. Покажем если оно есть, спрячем если его у модификации нет if(modificationDescription.length > 0) { goodsModDescriptionBlock.show().html('<div>' + modificationDescription + '</div>'); } else { goodsModDescriptionBlock.hide().html(); } // Идентификатор товарной модификации goodsModificationId.val(modificationId); } else { // Отправим запись об ошибке на сервер sendError('no modification by slug '+slug); alert('К сожалению сейчас не получается подобрать модификацию соответствующую выбранным параметрам.'); } }); }); var // Минимальное значение цены для фильтра priceFilterMinAvailable = parseInt($('.goodsFilterPriceRangePointers .min').text()) // Максимальное значение цены для фильтра ,priceFilterMaxAvailable = parseInt($('.goodsFilterPriceRangePointers .max').text()) // Максимальное значение цены для фильтра ,priceSliderBlock = $('#goods-filter-price-slider') // Поле ввода текущего значения цены "От" ,priceInputMin = $( "#goods-filter-min-price" ) // Поле ввода текущего значения цены "До" ,priceInputMax = $( "#goods-filter-max-price" ) // Блок с кнопкой, которую есть смысл нажимать только тогда, когда изменялся диапазон цен. ,priceSubmitButtonBlock = $( ".goodsFilterPriceSubmit" ) ; // Изменяет размер ячеек с ценой, т.к. у них нет рамок, есть смысл менять размеры полей ввода, чтобы они выглядили как текст function priceInputsChangeWidthByChars() { // Если есть блок указания минимальной цены if(priceInputMin.length) { priceInputMin.css('width', (priceInputMin.val().length*7 + 30) + 'px'); priceInputMax.css('width', (priceInputMax.val().length*7 + 30) + 'px'); } } // Слайдер, который используется для удобства выбора цены priceSliderBlock.slider({ range: true, min: priceFilterMinAvailable, max: priceFilterMaxAvailable, values: [ parseInt($('#goods-filter-min-price').val()) ,parseInt($('#goods-filter-max-price').val()) ], slide: function( event, ui ) { priceInputMin.val( ui.values[ 0 ] ); priceInputMax.val( ui.values[ 1 ] ); priceSubmitButtonBlock.show(); priceInputsChangeWidthByChars(); } }); // При изменении минимального значения цены priceInputMin.keyup(function(){ var newVal = parseInt($(this).val()); if(newVal < priceFilterMinAvailable) { newVal = priceFilterMinAvailable; } priceSliderBlock.slider("values", 0, newVal); priceSubmitButtonBlock.show(); priceInputsChangeWidthByChars(); }); // При изменении максимального значения цены priceInputMax.keyup(function(){ var newVal = parseInt($(this).val()); if(newVal > priceFilterMaxAvailable) { newVal = priceFilterMaxAvailable; } priceSliderBlock.slider("values", 1, newVal); priceSubmitButtonBlock.show(); priceInputsChangeWidthByChars(); }); // Обновить размеры полей ввода диапазона цен priceInputsChangeWidthByChars(); /* Кнопка добавления товара на сравнение товаров $('.goodsDataCompareButton').click(function(){ window.location.href = $(this).attr('rel') + ($(this).attr('rel').indexOf( '\?' ) > -1 ? '&' : '?') + 'id='+ $('.goodsDataMainModificationId').val()+ '&from='+ $('input[name="form[goods_from]"]').val(); return false; });*/ // Добавление/удаление товара на сравнение/избранное через ajax $('.add_to_compare_small, .add_to_wishlist_small').click(function(){ // Объект ссылки, по которой кликнули var a = $(this) ,addUrl = a.attr('data-action-add-url') ,delUrl = a.attr('data-action-delete-url') ,addTitle = a.attr('data-action-add-title') ,delTitle = a.attr('data-action-delete-title') ,isAdd = a.attr('data-action-is-add') ,aText = a.parent().find('.add_to_wishlist_small_text, .add_to_compare_small_text') requestUrl = a.attr('href') ; // Если в ссылке присутствует идентификатор, который мы можем узнать только вытащив его с текущей страницы if( /GET_GOODS_MOD_ID_FROM_PAGE/.test(requestUrl)) { requestUrl = requestUrl.replace(new RegExp('GET_GOODS_MOD_ID_FROM_PAGE'), $('.goodsDataMainModificationId').val()); } // Если есть информация о том какие URL адреса будут изменены, то можено не перегружать страницу и сделать запрос через ajax if(addUrl && delUrl) { $.ajax({ type : "POST", dataType: 'json', cache : false, url : requestUrl, data : { 'ajax_q': 1 }, success: function(data) { if('ok' == data.status) { if(isAdd == 1) { var from = addUrl ,to = delUrl ,newIsAddStatus = 0 ,newTitle = delTitle ? delTitle : '' ; a.addClass('added'); } else { var from = delUrl ,to = addUrl ,newIsAddStatus = 1 ,newTitle = addTitle ? addTitle : '' ; a.removeClass('added'); } // Если указано, что изменилось число товаров на сравнении if(typeof(data.compare_goods_count) != 'undefined') { // Блок информации о том, что есть товары на сравнении var compareBlock = $('#compareInfoBlock'); // Если на сравнении больше нет товаров if(0 < data.compare_goods_count) { compareBlock.show(); // Если на сравнении есть новые товары } else { compareBlock.hide(); } // Указываем информацию о новом количестве товаров на сравнении compareBlock.find('.nb_goods').text( data.compare_goods_count + ( typeof(genWordEnd) == 'function' ? ' товар' + genWordEnd(data.compare_goods_count, "", "а", "ов") : '') ); } // Обновляем ссылку, на которую будет уходить запрос и информацию о ней a.attr('href', a.attr('href').replace(new RegExp(from), to)) .attr('title', newTitle) .attr('data-action-is-add', newIsAddStatus); // Если рядом с ссылкой в виде круга есть текстовая надпись с описанием действия if(aText.length) { aText.text(aText.attr(isAdd == 1 ? 'data-action-text-delete' : 'data-action-text-add')); } // Если есть функция, которая отображает сообщения пользователю if(typeof(noty) == "function") { noty({ text:data.message ,layout:"center" ,type:"success" ,textAlign:"center" ,easing:"swing" ,animateOpen:{"height":"toggle"} ,animateClose:{"opacity":"hide"} ,speed:"500" ,timeout:"3000" ,closable: false ,modal: false ,dismissQueue: true ,onClose: true ,killer: true }); } } else if('error' == data.status) { // Если есть функция, которая отображает сообщения пользователю if(typeof(noty) == "function") { noty({ text:data.message ,layout:"center" ,type:"error" ,textAlign:"center" ,easing:"swing" ,animateOpen:{"height":"toggle"} ,animateClose:{"opacity":"hide"} ,speed:"500" ,timeout:"3000" ,closable: false ,modal: false ,dismissQueue: true ,onClose: true ,killer: true }); } } } }); return false; } }); // Сравнение товаров. Увеличение изображение при клике на ссылку увеличения и открытие галереии с изображениями этого товара $('.CompareGoodsImageZoom').click(function(){ // Галлерея фотографий для данной модификации товаров var galleryBlock = $('.galleryBlock' + $(this).attr('rel')), // Главное изображение товара, которое сейчас стоит у товара galleryMainImage = $('.CompareGoodsImageMain' + $(this).attr('rel')), // Изображение по которому нужно кликнуть в галлерее изображений ImageIngallery = galleryBlock.find('.CompareGoodsImageGallery'+galleryMainImage.attr('rel')); // Запускаем галлерею изображений от изображения товара, чтобы если например кликнули по гайке, то и открылись гайка, а не еще какой-либо изображение этого товара ImageIngallery.nyroModalManual({ gallery: 'gallery' + $(this).attr('rel') }); return false; }); // Сравнение товаров. Инвертирование свойств для сравнения товара $('.CompareCheckbox.invert').click(function(){ var checked = true, checkboxes = $('.CompareCheckbox:not(.invert)'); checkboxes.each(function(){ if($(this).attr('checked')) { checked = false; return false; } }); checkboxes.each(function(){ $(this).attr('checked', checked); }); $(this).attr('checked', checked); }); // Сравнение товаров. Скрытие характеристик товара, которые выделил пользователь $('.CompareGoodsHideSelected').click(function(){ $('.CompareGoodsTableTbodyComparisonLine').each(function(){ var CheckedCheckbox = $(this).find('.CompareCheckbox:checked:not(.invert)'); if(CheckedCheckbox.length>0) { $(this).hide(); } }); // отменяем выделение характеристик товаров $('.CompareCheckbox').attr('checked',false); return false; }); // Сравнение товаров. Отображение скрытых характеристик товара $('.CompareGoodsShowAll').click(function(){ $('.CompareGoodsTableTbodyComparisonLine:hidden').show(); return false; }); // Сравнение товаров. Верхняя навигация изменение фильтра на отображение всех характеристик товаров $('.CompareGoodsTableFilterShowAll').click(function(){ $('.CompareGoodsTableFilterSelected').removeClass('CompareGoodsTableFilterSelected'); $('.CompareGoodsTableTbodyComparisonLine:hidden').show(); $(this).addClass('CompareGoodsTableFilterSelected'); return false; }); // Сравнение товаров. Фильтр в верхней навигации. Отображение только различающихся характеристик товара $('.CompareGoodsTableFilterShowOnlyDifferent').click(function(){ $('.CompareGoodsTableFilterSelected').removeClass('CompareGoodsTableFilterSelected'); $('.CompareGoodsTableTbodyComparisonLine:not(.same)').show(); $('.CompareGoodsTableTbodyComparisonLine.same').hide(); $(this).addClass('CompareGoodsTableFilterSelected'); return false; }); // Сравнение товаров. При наведении на строку сравнения, она выделяется цветом $('.CompareGoodsTableTbodyComparisonLine').hover( function () { $(this).addClass('hover'); }, function () { $(this).removeClass('hover'); } ); // При клике по строке выделяем свойство $('.CompareGoodsTableTbodyComparisonLine td:not(.ceil1)').click(function(){ var CompareCheckbox = $(this).parent().find('.CompareCheckbox'); if(CompareCheckbox.attr('checked')) { CompareCheckbox.attr('checked', false); } else { CompareCheckbox.attr('checked', true); } }); function compareGetVars () { return new Array( $('.CompareGoodsTableTbody tr:first td').length - 1, parseInt($('.CompareGoodsTableTbody tr:first td:visible:not(.ceil1)').attr('class').replace(new RegExp('noBorderBottom compare\-td compare\-td\-'), '')), parseInt($('.CompareGoodsTableTbody tr:first td:visible:last').attr('class').replace(new RegExp('noBorderBottom compare\-td compare\-td\-'), '')) ); } // Прокрутка списка сравнения вправо $('.CompareGoodsTableNext').click(function(){ // Определяем используемые поля var data = compareGetVars(); // Изменяем их если это возможно. if(data[0] > data[2]) { $('.compare-td-' + data[1]).hide(); $('.compare-td-' + (data[2] + 1)).show(); if((data[2] + 1) >= data[0]) { $(this).find('a').addClass('disable'); } if(data[1] + 1 != 1) { $('.CompareGoodsTablePrev a').removeClass('disable'); } } return false; }); // Прокрутка списка сравнения влево $('.CompareGoodsTablePrev').click(function(){ // Определяем используемые поля var data = compareGetVars(); // Изменяем их если это возможно. if(1 < data[1]) { $('.compare-td-' + (data[1] - 1)).show(); $('.compare-td-' + data[2]).hide(); if((data[1] - 1) <= 1) { $(this).find('a').addClass('disable'); } if(data[2] - 1 != data[0]) { $('.CompareGoodsTableNext a').removeClass('disable'); } } return false; }); // Форма регистрации нового пользователя, действие ссылки "показать пароль" $('.clientForm .showPass').click(function(){ ChangePasswordFieldType(this, $('#sites_client_pass')); return false; }); // Форма регистрации нового пользователя, при оформлении заказа $('.OrderShowPass').click(function(){ ChangePasswordFieldType(this, $('#contactPassWord')); return false; }); /* При вводе пароля с caps lockом, покажет блок с сообщением для пользователя $('#sites_client_pass, #contactPassWord').capslock({ caps_lock_on:function(){$("#caps_lock").show();}, caps_lock_off:function(){$("#caps_lock").hide();} });*/ // При оформлении заказа дадим возможность зарегистрироваться пользователю $('#contactWantRegister').click(function(){ if($(this).attr("checked")) { $('.contactRegisterNeedElement').show(); $('#contactEmail, #contactPassWord').addClass('required'); } else { $('.contactRegisterNeedElement').hide(); $('#contactEmail, #contactPassWord').removeClass('required'); } }); // Добавление отзыва о товаре. Рейтинг if(typeof($('.goodsDataOpinionTableRating').stars) == "function" ) { $('.goodsDataOpinionTableRating').stars({ inputType: "input", split: 2, captionEl: $(".goodsDataOpinionMsg"), cancelShow: false }); } // Список отзывов о товаре. Ссылка на отображение формы для добавление отзыва о товаре $('.goodsDataOpinionShowAddForm').click(function(){ if(0 == $('#goodsDataOpinionAddBlock:visible').length) { $('#goodsDataOpinionAddBlock').show('blind'); } else { $('#goodsDataOpinionAddBlock').hide('blind'); return false; } }); // Добавление отзыва о товаре. кнопка reset скрывающая форму добавления отзыва о товаре $('.goodsDataOpinionFormReset').click(function(){ $('#goodsDataOpinionAddBlock').hide('blind'); return false; }); // Иконка для обновления изображение капчи $('.goodsDataOpinionCaptchaRefresh').click(function(){ RefreshImageAction(this,1,1); $('.goodsDataOpinionCaptchaImg').attr('src',$('.goodsDataOpinionCaptchaImg').attr('src')+'&rand'+Math.random(0,10000)); return false; }); // Фильтры по товарам. При нажании на какую либо характеристику или свойство товара происходит фильтрация товаров $('.contentTbodySearchFilterBlock input').click(function(){ $(this)[0].form.submit(); }); // Действия при выборе варианта доставки на этапе оформления заказа $('.deliveryRadio').click(function(){ // Если текущая выделенная зона доставки не относится к выбранному варианту доставки, снимаем выделение с зоны доставки if($('.deliveryZoneRadio:checked').attr('deliveryid') != $(this).val()) { $('.deliveryZoneRadio:checked').click().attr('checked', false); } }); // Действия при выборе зоны внутри варианта доставки на этапе оформления заказа $('.deliveryZoneRadio').click(function(){ var deliveryId = $(this).attr('deliveryid') ,deliveryZonePrice = $(this).parent().find('.deliveryZonePrice') ,deliveryTbody = $('.orderStageDeliveryListTable tbody[rel="' + deliveryId + '"]') ,deliveryBlock = deliveryTbody.find('#deliveryId' + deliveryId) ,deliveryZonePriceBlock = deliveryTbody.find('.orderStageDeliveryZonePrice') ,deliveryDefaultPriceBlock = deliveryTbody.find('.orderStageDeliveryDefaultPrice') ; // Если этот пункт уже выбран, при повторном клике пользователь видимо хочет снять выделение зоны доставки if('true' == $(this).attr('rel')) { $(this).attr('checked', false); $(this).attr('rel', 'false'); // Показываем цену по умолчанию deliveryDefaultPriceBlock.show(); // Скрываем цену образованную от зоны deliveryZonePriceBlock.hide(); // Отмечаем у всех радио баттонов зон доставки свойство говорящее что они не отмечены } else { $('.deliveryZoneRadio').attr('rel', 'false'); $(this).attr('rel', 'true'); // Показываем цену по умолчанию deliveryDefaultPriceBlock.hide(); // Скрываем цену образованную от зоны deliveryZonePriceBlock.show().html(deliveryZonePrice.html()); // Выделяем вариант доставки к которому относится зона доставки deliveryBlock.attr('checked', true); } }); $("#deliveryConvenientDate").datepicker({ dayNames : ['Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота', 'Воскресенье'], dayNamesMin : ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб' ], closeText : 'Готово', currentText : 'Сегодня' , duration : '', monthNames : ['Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Окрябрь','Ноябрь','Декабрь'], monthNamesShort : ['Янв','Фев','Март','Апр','Май','Июнь','Июль','Авг','Сен','Окт','Ноя','Дек'], yearRange : "-6:+6", dateFormat : 'dd.mm.yy', minDate : new Date(), firstDay : 1 }); }); // Быстрый заказ function quickorder(formSelector) { // Находим форму, которую отправляем на сервер, для добавления товара в корзину var formBlock = $($(formSelector).get(0)); // Проверка на существование формы отправки запроса на добавление товара в корзину if(1 > formBlock.length || formBlock.get(0).tagName != 'FORM') { alert('Не удалось найти форму добавления товара в корзину'); return false; } // Получаем данные формы, которые будем отправлять на сервер var formData = formBlock.serializeArray(); // Сообщаем серверу, что мы пришли через ajax запрос formData.push({name: 'ajax_q', value: 1}); // Так же сообщим ему, что нужно сразу отобразить форму быстрого заказа formData.push({name: 'fast_order', value: 1}); // Аяксом добавляем товар в корзину и вызываем форму быстрого заказа товара $.ajax({ type : "POST", cache : false, url : formBlock.attr('action'), data : formData, success: function(data) { $.fancybox({ content : data, // При изменении размера окна изменяем размер окна оформления заказа onUpdate : function(){ var w = $(window).width()*0.8; if(w < 800) { // Автоматический ресайз внутреннего блока fancybox-а $('.fancybox-inner').css('width', 'auto'); // Изменяем размер fancybox окна $('.fancybox-wrap').css({'width': w + 'px'}); } return false; } }); setTimeout(function(){$.fancybox.update();}, 500); } }); return false; }
Заменил весь код не работает модификация???
#8 Energyy
Отправлено 31 Август 2014 - 00:30
снова возвращаюсь к этому вопросу(((
Если, например, у товара есть несколько размеров, то при выборе размера информация о наличии не обновляется в карточке товара и при добавлении его в корзину добавляется товар в размере"по умолчанию" (в хроме и в сафари с моб телефона)
Если, например, у товара есть несколько размеров, то при выборе размера информация о наличии не обновляется в карточке товара и при добавлении его в корзину добавляется товар в размере"по умолчанию" (в хроме и в сафари с моб телефона)
#10 Energyy
Отправлено 21 Сентябрь 2014 - 16:58
Сake (03 Сентябрь 2014 - 23:50) писал:
Пожалуйста, приведите пример (в виде ссылки) страницы товара на которой воспроизводится описываемая вами проблема.
http://fit-en.ru/goo...cnomedbelt_blue
при выборе, например, размера L, не изменяется информация о наличии и далее при добавлении в корзину в нее попадает размер S
#12 Сake
Отправлено 15 Октябрь 2014 - 02:57
Найдите в шаблоне "Товар" следующий код
и замените его на
далее в файле main.js найдите код
и замените его на
<div rel="trueForDelivery"{% IF GOODS_MOD_REST_VALUE<=900 %}style="display:none;"{% ELSEIF GOODS_MOD_REST_VALUE>=950 %} style="display:none;"{% ENDIF %}>Товар в пути</div> </div> </div> </div> <div class="price" itemscope itemprop="offerDetails" itemtype="http://data-vocabulary.org/Offer">
и замените его на
<div rel="trueForDelivery"{% IF GOODS_MOD_REST_VALUE<=900 %}style="display:none;"{% ELSEIF GOODS_MOD_REST_VALUE>=950 %} style="display:none;"{% ENDIF %}>Товар в пути</div> </div> </div> <div class="price" itemscope itemprop="offerDetails" itemtype="http://data-vocabulary.org/Offer">
далее в файле main.js найдите код
// Функция собирает свойства в строку, для определения модификации товара function getSlugFromGoodsDataFormModificationsProperties(obj) { var properties = new Array(); $(obj).each(function(i){ properties[i] = parseInt($(this).val()); }); return properties.sort(function(a,B){return a - b}).join('_'); } var // Запоминаем поля выбора свойств, для ускорения работы со значениями свойств goodsDataProperties = $('form.goodsDataForm select[name="form[properties][]"]'), // Запоминаем блоки с информацией по модификациям, для ускорения работы goodsDataModifications = $('div.goodsDataMainModificationsList'); // Обновляет возможность выбора свойств модификации, для отключения возможности выбора по характеристикам модификации которой не существует. function updateVisibility (y) { // Проверяем в каждом соседнем поле выбора модификаций, возможно ли подобрать модификацию для указанных свойств goodsDataProperties.each(function(j){ // Если мы сравниваем значения свойства не с самим собой, а с другим списком значений свойств if( j != y ) { // Проходим по всем значениям текущего свойства модификации товара $(this).find('option').each(function(){ // Записываем временный массив свойств, которые будем использовать для проверки существования модификации var checkProperties = new Array(); $(goodsDataProperties).each(function(i){ checkProperties[i] = parseInt($(this).val()); }); // Пытаемся найти модификацию соответствующую выбранным значениям свойств checkProperties[j] = parseInt($(this).attr('value')); // Собираем хэш определяющий модификацию по свойствам slug = checkProperties.sort(function(a,B){return a - b}).join('_'); // Ищем модификацию по всем выбранным значениям свойств товара. Если модификации нет в возможном выборе, отмечаем потенциальное значение выбора как не доступное для выбора, т.к. такой модификации нет. if(!goodsDataModifications.filter('[rel="'+slug+'"]').length) { $(this).attr('disabled', true); // Если выбрав данное значение свойства товара можно подобрать модификацию, то выделяем вариант выбора как доступный. } else { $(this).attr('disabled', false); } }); } }); } // Обновляем возможность выбора модификации товара по свойствам. Для тех свойств, выбор по которым не возможен, отключаем такую возможность. // Проверяем возможность выбора на всех полях кроме первого, чтобы отключить во всех остальных варианты, которые не возможно выбрать updateVisibility (0); // Проверяем возможность выбора на всех полях кроме второго, чтобы в первом поле так же отключилась возможность выбора не существующих модификаций updateVisibility (1);
и замените его на
// Функция собирает свойства в строку, для определения модификации товара function getSlugFromGoodsDataFormModificationsProperties(obj) { var properties = new Array(); $(obj).each(function(i){ properties[i] = parseInt($(this).val()); }); return properties.sort(function(a,j){return a - j}).join('_'); } var // Запоминаем поля выбора свойств, для ускорения работы со значениями свойств goodsDataProperties = $('form.goodsDataForm [name^="form[properties]"]'), // Запоминаем блоки с информацией по модификациям, для ускорения работы goodsDataModifications = $('div.goodsDataMainModificationsList'); // Обновляет возможность выбора свойств модификации, для отключения возможности выбора по характеристикам модификации которой не существует. function updateVisibility (y) { // Проверяем в каждом соседнем поле выбора модификаций, возможно ли подобрать модификацию для указанных свойств goodsDataProperties.each(function(j){ // Если мы сравниваем значения свойства не с самим собой, а с другим списком значений свойств if( j != y ) { // Проходим по всем значениям текущего свойства модификации товара $(this).find('option').each(function(){ // Записываем временный массив свойств, которые будем использовать для проверки существования модификации var checkProperties = new Array(); $(goodsDataProperties).each(function(i){ checkProperties[i] = parseInt($(this).val()); }); // Пытаемся найти модификацию соответствующую выбранным значениям свойств checkProperties[j] = parseInt($(this).attr('value')); // Собираем хэш определяющий модификацию по свойствам slug = checkProperties.sort(function(a,j){return a - j}).join('_'); // Ищем модификацию по всем выбранным значениям свойств товара. Если модификации нет в возможном выборе, отмечаем потенциальное значение выбора как не доступное для выбора, т.к. такой модификации нет. if(!goodsDataModifications.filter('[rel="'+slug+'"]').length) { $(this).attr('disabled', true); // Если выбрав данное значение свойства товара можно подобрать модификацию, то выделяем вариант выбора как доступный. } else { $(this).attr('disabled', false); } }); } }); } // Обновляем возможность выбора модификации товара по свойствам. Для тех свойств, выбор по которым не возможен, отключаем такую возможность. // Проверяем возможность выбора на всех полях кроме первого, чтобы отключить во всех остальных варианты, которые не возможно выбрать updateVisibility (0); // Проверяем возможность выбора на всех полях кроме второго, чтобы в первом поле так же отключилась возможность выбора не существующих модификаций updateVisibility (1);
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных
Ответить цитируемым сообщениям Очистить