За последние 24 часа нас посетили 17639 программистов и 1670 роботов. Сейчас ищут 1937 программистов ...

Проблема со скриптом в Explore

Тема в разделе "JavaScript и AJAX", создана пользователем Kocapb, 10 ноя 2008.

  1. Kocapb

    Kocapb Активный пользователь

    С нами с:
    10 июл 2008
    Сообщения:
    169
    Симпатии:
    0
    Здравствуйте, написал скрипт для расчёта: все просто в зависимости от выбраных радио кнопок и чек боксов производится расчёт. Вот код
    HTML:
    1.  
    2. <form name="designForm">
    3.     <div padding: 1em;">
    4.     <dl class="tabsheets">
    5.        
    6.         <dt style="cursor: pointer"></dt>
    7.         <dd>
    8.             <div class="reducer">              
    9.                          
    10.                 <p>
    11.                    <t class="title"></t>
    12.                 <br><input type  = "radio"
    13.                       onClick="count4Site()"
    14.                       name  = "sizeRadio"
    15.                       value = "less10">
    16.                 <br><input type  = "radio"
    17.                       onClick="count4Site()"
    18.                       name  = "sizeRadio"
    19.                       value = "less50">
    20.              
    21.                 </p>
    22.                                  
    23.                 <p>
    24.                   <t class="title"></t>
    25.                 <br><input type  = "radio"
    26.                       CHECKED
    27.                       onClick="count4Site()"
    28.                       name  = "designRadio"
    29.                       value = "allSame">
    30.                 <br><input type  = "radio"
    31.                       onClick="count4Site()"
    32.                       name  = "designRadio"
    33.                       value = "firstOriginal">
    34.                
    35.                 </p>
    36.  
    37.                 <p>
    38.                   <t class="title"></t>
    39.                 <br><input type = "checkbox"
    40.                       onClick="count4Site()"
    41.                       name = "news">
    42.                 <br><input type = "checkbox"
    43.                       onClick="count4Site()"
    44.                       name = "vacancies">
    45.                
    46.                                
    47.                 <br><br><t class="title"> <strong>
    48.                
    49.                //В эту область производится вывод числа
    50.                  <pt id="outputText"></pt>
    51.                 </t>
    52.                 </p>
    53.  
    код рабочих функций:
    [js]
    function count4Site()
    {
    for (var i in document.designForm.sizeRadio)
    {
    if (document.designForm.sizeRadio.checked=="1")
    {
    checkedButton4sizeRadio = document.designForm.sizeRadio.value;
    }
    }
    for (var i in document.designForm.designRadio)
    {
    if (document.designForm.designRadio.checked=="1")
    {
    checkedButton4designRadio = document.designForm.designRadio.value;
    }
    }

    if(checkedButton4sizeRadio == "less10")
    {
    if(checkedButton4designRadio == "allSame")
    {
    price = 15000;
    }
    if(checkedButton4designRadio == "firstOriginal")
    {
    price = 17000;
    }

    }
    if(checkedButton4sizeRadio == "less50")
    {
    if(checkedButton4designRadio == "allSame")
    {
    price = 20000;
    }
    if(checkedButton4designRadio == "firstOriginal")
    {
    price = 25000;
    }

    }


    if(document.designForm.news.checked)
    {
    price = price + 5000;
    }
    if(document.designForm.vacancies.checked)
    {
    price = price + 5000;
    }


    price = number_format(price,0,',',' ');
    document.getElementById("outputText").innerHTML = price
    }
    [/js]
    в мозиле все летает а вот в Explore пишет ошибку:

    • checkedButton4sizeRadio - определение отсутствует
    В чем проблема и как ее рашить?
     
  2. karakh

    karakh Активный пользователь

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    Проблема в видимости переменных. checkedButton4sizeRadio определяется внутри блока if (и внутри блока for впридачу), а потом ты ее пытаешься использовать вне этого блока. То же самое касается и всех остальных переменных.
    Странно что в Мозилле работает
     
  3. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    karakh
    1. блоки if и for не определяют новую область видимости
    2. переменные объявленные не явным образом (без var) попадают в глобальную область видимости (window)

    говорит о том что первые два цикла провалились
    [js]
    function count4Site() {
    function getVal(name) {
    var a = document.getElementsByName(name)
    for (var i = 0; i < a.length; i++) if (a.checked) return a.value
    }

    var priceTable = {
    less10: {
    allSame: 15000,
    firstOriginal: 17000
    },
    less50: {
    allSame: 20000,
    firstOriginal: 25000
    }
    }

    var price = priceTable[getVal('sizeRadio')][getVal('designRadio')]

    if (document.designForm.news.checked) price += 5000
    if (document.designForm.vacancies.checked) price += 5000
    ...[/js]
     
  4. Kocapb

    Kocapb Активный пользователь

    С нами с:
    10 июл 2008
    Сообщения:
    169
    Симпатии:
    0
    спасибо! еще вопрос по коду. я делал тупо перебором всех возможных вариантов, в приведённом выше примере более обобщённо код построен... а как лучше (по скорости) реализовывать код?
     
  5. В данном случае скорость - не показатель. Подумай сам, зачем оптимизировать на скорость код, выполняющийся один раз, за время, незаметное глазу?
     
  6. Kocapb

    Kocapb Активный пользователь

    С нами с:
    10 июл 2008
    Сообщения:
    169
    Симпатии:
    0
    дело в том что у меня это функция вызывается по событию оnClick на элементе checkbox и кнопках radiobox и почему-то в explore он выдает ошибку...
    http://www.point-it.ru/design.html
    в чем причина и где искать ее решение?
     
  7. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Чтобы все работало, надо юзать DOM.
     
  8. Kocapb

    Kocapb Активный пользователь

    С нами с:
    10 июл 2008
    Сообщения:
    169
    Симпатии:
    0
    дело ещё походу не только в коде. Убрал все оставил только
    [js]document.getElementById("outputText").innerHTML = "1234"[/js]
    в checkbox по событию onClick вызываю функцию он не работает пишет ошибку: Неизвестная причина. хотя код вроде DOM
     
  9. Kocapb

    Kocapb Активный пользователь

    С нами с:
    10 июл 2008
    Сообщения:
    169
    Симпатии:
    0
    Ti
    спасибо используя твой подход все заработало.