ошибка var не определена, но определена ранее - PullRequest
0 голосов
/ 13 октября 2011

этот код

    $(document).ready(function(){
                            var wBack = $('ul li.roundabout-in-focus').height();
                            var hBack = $('ul li.roundabout-in-focus').width();
                            var lback = $('ul li.roundabout-in-focus').css('left');
                            var tback = $('ul li.roundabout-in-focus').css('top');
    });
    function close_current(){
                    $('.nInfoIE').show();
                        $('.roundabout-in-focus').find('.img').show();
                        $('.roundabout-in-focus').css({position:'absolute',height:hBack,width:wBack,left:lBack,top:tBack});
                        $('.roundabout-in-focus').find('.iframe').css({'visibility':'hidden'});
                        $('ul li').find('.iframe').addClass('esconder');

                        $('ul li iframe').each(function(){
                            var tempurl = '';
                            tempurl = $(this).attr('src');
                            $(this).attr('src',tempurl.replace('?autoplay=1', ''));
                        });
                        watching = false;
                        $('.nInfoIE').hide();
 }

выдает ошибку с помощью firebug, предупреждая, что hBack не определен, как вы можете видеть, определяется в документе.

-edit-

даже пытался добавить var wBack ,hBack,lback,tback = 0; перед document.ready и удалить один 'var' внутри document.ready

что мне не хватает?

Ответы [ 5 ]

4 голосов
/ 13 октября 2011

Вы определили переменные внутри функции обработчика «готово».Это означает, что они закрыты для этой функции и не видны за ее пределами.

Вы можете сделать их видимыми, явно указав им window свойства:

  window['hBack'] = whatever;

или вы можете поместить свойФункция closeCurrent также внутри обработчика «ready», если на нее ссылается только код внутри обработчика.

3 голосов
/ 13 октября 2011

Одним словом, сфера.Объявите ваши переменные вне функции $(document).ready, чтобы получить их в глобальной области видимости, а затем установите их внутри функции.

var wBack, hBack, lback, tback;
$(document).ready(function () {
    wBack = ...
2 голосов
/ 13 октября 2011

это проблема объема.

другие ответы здесь технически сработают, но я бы никогда не советовал сохранять эти переменные глобальными, если они вам не нужны глобально.

вы определяете wBack, hBack, lBack и tBack внутри блока DOM-ready, но вы пытаетесь получить к ним доступ из обработчика событий. если вы можете, удалите onclick из элемента и добавьте его в блок DOM-ready для совместного использования переменных.

$(document).ready(function(){

    // Store the selector
    var element = $('ul li.roundabout-in-focus')
    var wBack = element.height();
    var hBack = element.width();
    var lback = element.css('left');
    var tback = element.css('top');

   $("#someElement").click(function close_current(){
                    $('.nInfoIE').show();
                        $('.roundabout-in-focus').find('.img').show();
                        $('.roundabout-in-focus').css({position:'absolute',height:hBack,width:wBack,left:lBack,top:tBack});
                        $('.roundabout-in-focus').find('.iframe').css({'visibility':'hidden'});
                        $('ul li').find('.iframe').addClass('esconder');

                        $('ul li iframe').each(function(){
                            var tempurl = '';
                            tempurl = $(this).attr('src');
                            $(this).attr('src',tempurl.replace('?autoplay=1', ''));
                        });
                        watching = false;
                        $('.nInfoIE').hide();
   })
});

Вы также должны кэшировать селектор в верхней части этого блока (как в моем примере), чтобы не повторять запросы DOM (вы, вероятно, могли бы сделать это и в обработчике кликов, но селекторы разные, поэтому я оставил одна функция:)

надеюсь, это поможет! веселит.

0 голосов
/ 13 октября 2011

Ваши переменные (wBack, hBack, lback и tback) просто определены в вашей функции document.ready. Есть не глобальные.

Чтобы использовать его в другой функции, ваша переменная должна быть глобальной. Вы можете просто удалить 'var' перед вашей переменной, потому что в javascript объявление переменной без 'var' делает переменную глобальной. Или вы можете вручную объявить его глобальным, как это:

var wBack;      
var hBack;
var lback;
var tback;
$(document).ready(function(){
   wBack = $('ul li.roundabout-in-focus').height();
   hBack = $('ul li.roundabout-in-focus').width();
   lback = $('ul li.roundabout-in-focus').css('left');
   tback = $('ul li.roundabout-in-focus').css('top');
});
0 голосов
/ 13 октября 2011

Переменная, она определена только в области действия функции, которую вы передаете функции ready. Если вы хотите сослаться на него, вам нужно объявить его в глобальной области видимости. (Просто удалите ключевое слово var)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...