Вызов функции JS не будет работать в Chrome и Opera (JS + jQuery) - PullRequest
1 голос
/ 05 октября 2010

Я не могу заставить работать следующие функции под Chrome и Opera (последние версии для Windows XP).Код такой:

$.getScript('/js/modules/'+module+'.js', function() {
    setTimeout('window.'+module+'_init()', 800);
});

Кажется, что все работает нормально, скрипт загружается, функция init существует (несколько отладочных предупреждений в этом выражении setTimeout подтвердили, что "window.module_init" )на самом деле это функция ), но функция просто не запускается.

Я попытался поставить простое предупреждение в начале этой функции инициализации, оставить ТОЛЬКО предупреждениетам - ничего не помогло.

Я должен сказать, что я довольно озадачен этим, так как это прекрасно работает под Firefox и MSIE.

Кстати, функция init во внешнем js-файле выглядит простокак это:

function notifications_init() {
    alert('test');
}

" уведомления " - это значение моей переменной "module" выше

Любой совет очень ценится: -)

Ответы [ 3 ]

1 голос
/ 05 октября 2010
setTimeout(window[module+'_init'], 800);
0 голосов
/ 05 октября 2010

Я только что проверил то, что вы объясняете здесь, и это отлично сработало здесь. Я предполагаю, что внешний js-файл, который вы загружаете с помощью $.getScript, содержит ошибки.

Не могли бы вы прокомментировать все в этом файле, кроме notifications_init(), который у вас есть в вашем вопросе?

Вот что я сделал:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
    $(document).ready(function () {
        alert('start');
        var module = 'test';
        $.getScript('/Scripts/' + module + '.js', function () {
            alert('script was loaded and executed');
            setTimeout('window.' + module + '_init()', 800);
        });
        alert('finish');
    });
</script>

И test.js содержит только это:

function test_init() {
    alert('test function');
}
0 голосов
/ 05 октября 2010

Как насчет setTimeout('window.'+module+'_init', 800);, без брекетов?

...