2013-12-10 5 views
0

Я объявляю глобальный вар в верхней части сценария, как следоватьКак получить переменную 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. Как я могу сделать?

+1

'macaddr_obj' не на самом деле глобальный характер. Он локален для вашего обработчика 'ready'. –

+1

'macaddr_obj' является локальным для готового обработчика, в котором он объявлен –

+0

Удалите' var' из декларации 'var macaddr_obj;'. Это дало бы ему глобальную область действия (хотя на практике не всегда можно использовать переменные в глобальном масштабе) – tewathia

ответ

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' 
1

Определите macaddr_obj глобально:

var macaddr_obj; 

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

}); 
Смежные вопросы