2014-01-17 5 views
0

У меня возникли проблемы с доступом и обновлением переменных, объявленных внутри функции document.ready. Каждый раз, когда я пытаюсь сделать оповещения внутри моих функций значениями этих функций. Вот мой документ. готовая функция с переменными и функциями внутри них. Любая помощь вообще с этим была бы весьма признательна.Доступ к переменным, объявленным вне функций jquery

/***********************************************************/ 
     var bdv; 
     var mv; 
     var cYear; 
     var _miles; 
     var cpo_input; 

/* -------------------------------------------------*/ 

     var _prestige; 
     var car_type; 
     var acc_history; 
     var _aam; 
     var avg_mileage; 

/***********************************************************/ 
$(document).ready(function() { 

/***********************************************************/ 
     bdv = $("#base_dv").val(); 
     mv = $('input:text[name="field8"]').val(); 
     cYear = $('input:text[name="field2"]').val(); 
     _miles = $('input:text[name="field5"]').val(); 
     cpo_input = $('input:text[name="field19"]'); 

/* -------------------------------------------------*/ 

     _prestige = 0.00; 
     car_type= 0; 
     acc_history = 0; 
     _aam = 0.00; 
     avg_mileage = 0.00; 

/***********************************************************/    
    if ('<?php echo $job[0][' 
    job_type '] ?>' == "33") { 

     $('input:radio[name="field32"][value = val1]').attr("disabled", true); 
     $('input:radio[name="field32"][value = val2]').attr("disabled", true); 

     $("[name='field20[]']").each(function() { 
      $(this).change(function() { 
       $('input:radio[name="field7"]').each(function() { 
        if (!$('input:radio[name="field7"]').is(':checked')) { 
         alert("Please Select 2 or 4 door car"); 
         $("[name='field20[]']").each(function() { 
          $(this).removeAttr('checked'); 
         }); 
        } else if ($('input:radio[name="field7"]').is(':checked')) { 
         return false; 
        } 
       }); 
       $(this).click(function() { 
        bdv = damage_severity(mv, bdv); 
        _aam = average_annual_mileage_factor(_miles, mv); 
        avg_mileage = avg_mileage_calc(_miles, cYear); 

        alert("Market Value: " + mv); 
        alert("Miles Reporting: " + _miles); 
        alert("Base DV:" + bdv); 
        alert("Average Annual Mileage" + _aam); 
        alert("Average Mileage outside func: " + avg_mileage); 
       }); 
      }); 
     }); 
    }); 
+1

переменные будут доступны только в том же или нижнем диапазоне. Но здесь я не вижу проблемы –

+0

A.Wolff Я не уверен, почему он делает, почему я тоже получаю 0, даже после объявления их вне области .ready и инициализации их внутри области .ready. – infomatic

+0

Teemu извините, я, вероятно, не полностью фокусировался. Я имел в виду ценности, которые я предупреждаю. Это оригинальные объявленные значения. О возврате false, я не был уверен в лучшем способе выхода из цикла после выполнения условия. – infomatic

ответ

0

bdv, _aam и avg_mileage, кажется, имеют то же значение, что они имели, когда document.ready была вызвана, так как вы никогда не обновлять эти значения перед их использованием.

Я бы переместить заявления обратно в $(document).ready() и сделать что-то вроде этого:

$(document).ready(function() { 
    var bdv, aam = ..., 
     $bdv = $("#base_dv"), 
     $mv = $('input:text[name="field8"]'), 
       : 
     ; 
       : 
    $(this).click(function() { 
     bdv = damage_severity($mv.val(), $bdv.val()); 
       : 
    }); 
       : 
}); 

Обратите также внимание, что вы, чтобы переместить $(this).click(); из $(this).change();. Как и сейчас, ваш код будет прикреплять новый элемент прослушивателя к элементу каждый раз, когда на этот элемент запускается onchange.

+0

Использование bdv = damage_severity ($ mv.val(), $ bdv.val()); на самом деле вернул ошибку, говоря, что $ mv.val() isnt функция – infomatic

+0

Вы уверены, что присвоили им фактический объект jQuery вместо '.val()'? Пожалуйста, взгляните на объявление переменной в моем коде. – Teemu

+0

Это сработало! Большое спасибо Teemu! – infomatic

2

Объявление их за пределами .ready(). Заполните их внутри .ready().

Кроме того, у вас есть много функциональных возможностей, которые не обязательно должны быть в .ready().

+0

В чем проблема с кодом OP, я не могу это определить. ОК, я вижу, OP отправляет код, который работает, а не тот, который не работает –

+0

Я сделал это, и теперь он не предупреждает о значениях, Im не уверен, почему – infomatic

+0

Я не вижу, что я не вижу ваш новый код. –

Смежные вопросы