如何从其他函数获取jquery变量?

时间:2013-12-10 08:34:16

标签: jquery

我在脚本顶部声明了全局变量,如下所示

$(function(){
    //Set button disabled
    var macaddr_obj;});

我有一个ajax函数,如下所示

$('.item-macaddr').live('keyup', function(){
        var vNode  = $(this);           
        var target = $(vNode).parents('tr');    
        var macAddr =  $(target).find('.item-macaddr').val();


        $.ajax({
            type: 'POST',
            url: '" . Yii::app()->createUrl('workorders/check_mac_addr') . "&macAddr=' + macAddr, 
            success: function (data) {                                      
                macaddr_obj = JSON.parse(data);


                if(macaddr_obj.check == 'true')
                {
                    $(target).find('.mac-duplicate-error').text(macaddr_obj.msg);
                    $(target).find('.mac-duplicate-error').addClass('errorMessage');

                    $('#sites-form input[type=submit]').attr('disabled', 'disabled');   
                }else {
                    $(target).find('.mac-duplicate-error').text('');                    
                }
            },          
        });

    });

当其他文本框中的keyup时,调用函数“check_item_row”

$('.item-ipaddr').live('keyup', function(){
        var vNode  = $(this);           
        var target = $(vNode).parents('tr');    
        check_item_row(target);         
    });

这是使用macaddr_obj

的功能
var check_item_row = function(target)
    {
        alert(macaddr_obj.check);
}

我想使用macaddr_obj的值。我该怎么办?

2 个答案:

答案 0 :(得分:1)

全局定义您的macaddr_obj:

var macaddr_obj;

$(function(){
    //Set button disabled
...........

});

答案 1 :(得分:1)

您应该将check_item_row函数声明放在$(function(){ ... })块中,以及处理程序声明:

$(function(){
    //Set button disabled
    var macaddr_obj;

    ...

    var check_item_row = function(target) {
        alert(macaddr_obj.check);
    }

    ...

    // ".live()" is deprecated, use the following syntax with ".on()" :
    $(document).on('keyup', '.item-macaddr', function(){
        ...
    });

    $(document).on('keyup', '.item-ipaddr', function(){
        ...
    });

});

从您的代码中可以看出,macaddr_obj只会在触发至少一个ajax调用后才会初始化,并成功返回一个值。

如果您在之前致电check_item_row ,则会触发TypeError: macaddr_obj is undefined

避免这种情况的一种简单方法是使用默认值初始化对象:

var macaddr_obj = {};  // 'macaddr_obj.check' will return 'undefined',
                       // which probably fits your needs
 // or
var macaddr_obj = {check: false}; // 'macaddr_obj.check' will return 'false'