2011-01-22 4 views
0

У меня есть довольно простой вопрос jquery. im пытается добавить jscrollpane на мой сайт и заставить его инициализировать после вызова ajax. однако, когда я запускаю функцию, я продолжаю получать сообщение «testFunction не определено» в консоли. код очень прост:Понимание jQuery (основной вопрос)

$(document).ready(function() { 
    var api = $('.scroll-pane').jScrollPane({ 
     showArrows:true, 
     maintainPosition: false 
    }).data('jsp'); 

    function testFunction() { 
     api.getContentPane().load('ajax_content.html', function() { 
     api.reinitialise(); 
    }); 
}   
}); 

Почему я продолжаю получать сообщение? если я возьму тестовую функцию из функции готовности документа, я получаю сообщение об ошибке «api not defined» заранее

ответ

5

Это связано с областью действия переменной api, которую вы определяете. Вам необходимо определить переменную api за пределами $(document).ready(function() { .... Попробуйте следующее:

var api; 
$(document).ready(function() { 
    api = $('.scroll-pane').jScrollPane({ 
     showArrows:true, 
     maintainPosition: false 
    }).data('jsp'); 
}); 

function testFunction() { 
    api.getContentPane().load('ajax_content.html', function() { 
     api.reinitialise(); 
    }); 
} 

Надеюсь, это поможет.

+0

спасибо, что сделал трюк! – robs

1

Сообщение «не определено» происходит из кода, использующего testFunction, но не ждет, пока он не будет определен. Вы включили определение testFunction в событие documentReady, но не пользователь testFunction.

2

Я думаю, это связано с тем, что область действия тестовой функции теперь является анонимной функцией, которую вы вызываете при подготовке документа. Объявите testFunction вне этой анонимной функции.