访问在jquery函数之外声明的变量

时间:2014-01-17 21:11:07

标签: javascript jquery

我在访问和更新document.ready函数中声明的变量时遇到了一些问题。每次我尝试在我的函数内部执行这些函数的值。这是我的文件。带有变量和函数的就绪函数。对此有任何帮助将不胜感激。

 /***********************************************************/ 
        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);
                 });
             });
         });
     });

2 个答案:

答案 0 :(得分:2)

.ready()之外声明它们。在.ready()内填充它们。

此外,您拥有许多功能,首先不需要.ready()

答案 1 :(得分:0)

bdv_aamavg_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时,您的代码都会为元素附加一个新的单击侦听器。