Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Ошибка в JS

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
vlom
Отправлено: 20 Июля, 2012 - 06:27:48
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 681
Дата рег-ции: Окт. 2010  
Откуда: Екатеринбург


Помог: 4 раз(а)




Всем привет.
На одном из сайтов потребовалось измененить внешний вид выпадающего списка.
Для этого использовал JS скрипт стороннего разработчика. Но вот не задача в IE7-8 не работает.
Ошибка получается вот в этой функции
CODE (javascript):
скопировать код в буфер обмена
  1. function replaceSelects() {
  2.     for(var q = 0; q < selects.length; q++) {
  3.                 //create and build div structure
  4.                 var selectArea = document.createElement('div');
  5.                 var left = document.createElement('div');
  6.                 var right = document.createElement('div');
  7.                 var center = document.createElement('div');
  8.                 var button = document.createElement('a');
  9.                 var text = document.createTextNode(selectText);
  10.                 center.id = "mySelectText" + q;
  11.                 var selectWidth = parseInt(selects[q].className.replace(/width_/g, ""));
  12.                 center.style.width = selectWidth - 10 + 'px';
  13.                 selectArea.style.width = selectWidth + selectRightSideWidth + selectLeftSideWidth + 'px';
  14.                 button.style.width = selectWidth + selectRightSideWidth + selectLeftSideWidth + 'px';
  15.                 button.style.marginLeft = - selectWidth - selectLeftSideWidth + 'px';
  16.                 button.href = "javascript:showOptions("+q+")";
  17.                 button.onkeydown = selectEvent;
  18.                 button.className = "selectButton"; //class used to check for mouseover
  19.                 selectArea.className = "selectArea";
  20.                 selectArea.id = "sarea"+q;
  21.                 left.className = "left";
  22.                 right.className = "right";
  23.                 center.className = "center";
  24.                 right.appendChild(button);
  25.                 center.appendChild(text);
  26.                 selectArea.appendChild(left);
  27.                 selectArea.appendChild(right);
  28.                 selectArea.appendChild(center);
  29.                 //hide the select field
  30.         selects[q].style.display='none';
  31.                 //insert select div
  32.                 selects[q].parentNode.insertBefore(selectArea, selects[q]);
  33.                 //build & place options div
  34.                 var optionsDiv = document.createElement('div');
  35.                 optionsDiv.style.width = selectWidth + 1 + 'px';
  36.                 optionsDiv.className = "optionsDivInvisible";
  37.                 optionsDiv.id = "optionsDiv"+q;
  38.                 optionsDiv.style.left = findPosX(selectArea) + 'px';
  39.                 optionsDiv.style.top = findPosY(selectArea) + selectAreaHeight - selectAreaOptionsOverlap + 'px';
  40.                 //get select's options and add to options div
  41.         var re1 = /[\d]+,[\d]+ руб/i;
  42.         var re2 = /[\d]+/i;
  43.         var numbe = 0
  44.                 for(var w = 0; w < selects[q].options.length; w++) {
  45.                         var optionHolder = document.createElement('p');
  46.                         var optionLink = document.createElement('a');
  47.            
  48.             var strOption = selects[q].options[w].text;
  49.             var rgPrice = re1.exec(strOption);
  50.            
  51.             if(rgPrice == null){
  52.                 var priceHtml = jQuery("#cena").html();
  53.                 strOption = selects[q].options[w].text + ' ' + re1.exec(priceHtml);
  54.                 jQuery("#customPrice015 option").eq(w).html(strOption);
  55.                 var optionTxt = document.createTextNode(strOption);
  56.             } else {
  57.                 var selectHtml = jQuery("#customPrice015 option").eq(w).text();
  58.                 if(selectHtml.match(/-[\d]+,[\d]+ руб/i)){
  59.                     var price = jQuery(".price_t").html();
  60.                     var cena = jQuery("#cena").html();
  61.                     var c1 = re1.exec(cena);
  62.                     var p1 = re1.exec(selectHtml);
  63.                     var rgCena = re2.exec(c1);
  64.                     var rgPrice = re2.exec(p1);
  65.                     var price = Number(rgCena) - Number(rgPrice);
  66.                     var reEnd = /-[\d]+,[\d]+ руб/i;
  67.                 } else {
  68.                     var price = jQuery(".price_t").html();
  69.                     var cena = jQuery("#cena").html();
  70.                     var c1 = re1.exec(cena);
  71.                     var p1 = re1.exec(selectHtml);
  72.                     var rgCena = re2.exec(c1);
  73.                     var rgPrice = re2.exec(p1);
  74.                     var price = Number(rgPrice) + Number(rgCena);
  75.                     var reEnd = /[\d]+,[\d]+ руб/i;
  76.                 }
  77.                 var strOption = selectHtml.replace(reEnd, price + ',00 руб');
  78.                 var optionTxt = document.createTextNode(strOption);
  79.             }
  80.                         optionLink.href = "javascript:showOptions("+q+"); selectMe('"+selects[q].id+"',"+w+","+q+");";
  81.                         optionLink.appendChild(optionTxt);
  82.                         optionHolder.appendChild(optionLink);
  83.                         optionsDiv.appendChild(optionHolder);
  84.                         //check for pre-selected items
  85.                         if(selects[q].options[w].selected) {selectMe(selects[q].id,w,q);}
  86.                 }
  87.                 //insert options div
  88.                 document.getElementsByTagName("body")[0].appendChild(optionsDiv);
  89.         }
  90. }


(Добавление)
210, 211 строки это
CODE (javascript):
скопировать код в буфер обмена
  1. var selectWidth = parseInt(selects[q].className.replace(/width_/g, ""));
  2.                 center.style.width = selectWidth - 10 + 'px';
 
 Top
tuareg
Отправлено: 20 Июля, 2012 - 07:43:48
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




а что по проще нет?
 
 Top
vlom
Отправлено: 20 Июля, 2012 - 07:55:34
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 681
Дата рег-ции: Окт. 2010  
Откуда: Екатеринбург


Помог: 4 раз(а)




был вариант использовать jQuery.transform но мне надо еще при выборе определенного пункта менять цену, товара и картинку
 
 Top
tuareg
Отправлено: 20 Июля, 2012 - 08:09:46
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




Найдите какой-нибудь простенький. А на событие change напишите свой обработчик.
А по теме
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. parseInt(selects[q].className.replace(/width_/g, ""));
  3.  

Надо указывать систему исчесления, т.е
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. parseInt(selects[q].className.replace(/width_/g, ""),10);
  3.  
 
 Top
vlom
Отправлено: 23 Июля, 2012 - 09:53:01
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 681
Дата рег-ции: Окт. 2010  
Откуда: Екатеринбург


Помог: 4 раз(а)




tuareg ты прав
jQuery + 20 строк кода + полчаса свободного времени и получилось вот так
CODE (javascript):
скопировать код в буфер обмена
  1. jQuery.noConflict();
  2. jQuery(document).ready(function(){
  3.     jQuery('span.product-field-display').css('display', 'none');
  4.     jQuery('.product-field-type-V').prepend('<div class="select_area_wrap"></div>');
  5.    
  6.     jQuery('.select_area_wrap').append(
  7.         '<div class="selected_wrap">'
  8.             +'<div class="slectedOptLeft"></div>'
  9.             +'<div class="selectedOptRight"></div>'
  10.         +'</div>'
  11.         +'<div class="itemOpt"></div>'
  12.         );
  13.     jQuery('.slectedOptLeft').html('<div class="center">'+jQuery('span.product-field-display select option:eq(0)').text()+'</div>');
  14.     jQuery('span.product-field-display select option:eq(0)').attr('selected', 'selected');
  15.     var idOpt, txtOpt;
  16.     jQuery('span.product-field-display select option').each(function(i, elem){
  17.         idOpt = jQuery(elem).val();
  18.         txtOpt = jQuery(elem).text();
  19.         jQuery('.select_area_wrap .itemOpt').append('<a href="#" class="option" id="' + idOpt + '">' + txtOpt + '</a>');
  20.     });
  21.    
  22.     jQuery('.selected_wrap').click(function(){
  23.         jQuery('.itemOpt').css('display', 'block');
  24.     });
  25.    
  26.     jQuery('.itemOpt a.option').click(function(){
  27.         idOpt = jQuery(this).attr('id');
  28.         txtOpt = jQuery(this).text();
  29.         jQuery('.slectedOptLeft .center').text(txtOpt);
  30.         jQuery('span.product-field-display select option').each(function(i, elem){
  31.             jQuery(elem).removeAttr('selected');
  32.         });
  33.         jQuery('span.product-field-display select option[value="'+idOpt+'"]').attr('selected', 'selected');
  34.         jQuery('.itemOpt').removeAttr('style');
  35.         return false;
  36.     });
  37. });

может кому пригодится
 
 Top
tuareg
Отправлено: 23 Июля, 2012 - 09:54:54
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




Хоть бы разметку выложил Улыбка
 
 Top
vlom
Отправлено: 23 Июля, 2012 - 09:58:24
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 681
Дата рег-ции: Окт. 2010  
Откуда: Екатеринбург


Помог: 4 раз(а)




и этого не жалко
CODE (html):
скопировать код в буфер обмена
  1. .itemOpt{
  2.     display: none;
  3.     position:absolute;
  4.     margin-left:3px;
  5.     width: 291px;
  6.     background:#CCD0DD;
  7.     color: #000;
  8.     font-size:14px;
  9.     z-index:20;
  10.     }    
  11. .itemOpt a{
  12.     display: block;
  13.     padding:5px 4px;
  14.     border-bottom:1px solid #6f7074;
  15.     color:#000;
  16.     text-decoration:none;
  17.     }
  18. .itemOpt a:last-child{
  19.     border: none;
  20.     }
  21. .selected_wrap{
  22.     width:297px;
  23.     height:40px;
  24.     position: relative;
  25.     z-index: 1;
  26.     cursor: pointer;
  27.     }
  28.     .slectedOptLeft{
  29.         float: left;
  30.         width:252px;
  31.         height:40px;
  32.         background:url(../images/select_l.png) no-repeat left top;
  33.         position: relative;
  34.         z-index: 0;
  35.         }
  36.         .center{
  37.             width: 255px;
  38.             padding-top:10px;
  39.             padding-left: 10px;
  40.             overflow:hidden;
  41.             white-space:nowrap;
  42.             text-align: left;
  43.             font-size: 16px;
  44.             color: #fff;
  45.             font-family: Arial;
  46.             }
  47.     .selectedOptRight{
  48.         float: left;
  49.         height:40px;  
  50.         width: 45px;
  51.         background:url(../images/select_r.png) no-repeat right top;
  52.         position: relative;
  53.         z-index: 0;
  54.         }
 
 Top
vlom
Отправлено: 25 Июля, 2012 - 13:09:30
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 681
Дата рег-ции: Окт. 2010  
Откуда: Екатеринбург


Помог: 4 раз(а)




Тот код который был приведен ранее писался под конкретный кусок кода на сайте, теперь выкидываю почищенный который работает на всей странице
CODE (javascript):
скопировать код в буфер обмена
  1. jQuery.noConflict();
  2. jQuery(document).ready(function(){
  3.     jQuery('select').css('display', 'none');
  4.     jQuery('.select_wrap').prepend('<div class="select_area_wrap"></div>');
  5.    
  6.     jQuery('.select_area_wrap').append(
  7.         '<div class="selected_wrap">'
  8.             +'<div class="slectedOptLeft"></div>'
  9.             +'<div class="selectedOptRight"></div>'
  10.         +'</div>'
  11.         +'<div class="itemOpt"></div>'
  12.         );
  13.     jQuery('.slectedOptLeft').html('<div class="center">'+jQuery('select option:eq(0)').text()+'</div>');
  14.     jQuery('select option:eq(0)').attr('selected', 'selected');
  15.     var idOpt, txtOpt;
  16.     jQuery('select option').each(function(i, elem){
  17.         txtOpt = jQuery(elem).text();
  18.         jQuery('.select_area_wrap .itemOpt').append('<a href="#" class="option">' + txtOpt + '</a>');
  19.     });
  20.    
  21.     jQuery('.selected_wrap').click(function(){
  22.         jQuery('.itemOpt').css('display', 'block');
  23.     });
  24.    
  25.     jQuery('.itemOpt a.option').click(function(){
  26.         idOpt = jQuery(this).index();
  27.         txtOpt = jQuery(this).text();
  28.         jQuery('.slectedOptLeft .center').text(txtOpt);
  29.         jQuery('select option').each(function(i, elem){
  30.             jQuery(elem).removeAttr('selected');
  31.         });
  32.         jQuery('select option:eq('+idOpt+')').attr('selected', 'selected');
  33.         jQuery('.itemOpt').removeAttr('style');
  34.         return false;
  35.     });
  36. });

(Добавление)
не забдьте в нужном месте создать контейнер .select_wrap
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB