2010-08-05 2 views
0

Я совершенно новый для namespacing и т. Д., Поэтому, надеюсь, это будет просто.jQuery namespacing глобальная переменная

У меня есть переменная в функции наведения jQuery, которая должна быть доступна для глобального пространства.

пространство имен мои глобальные переменные я поместил этот код в файле JS, который происходит перед любым другим кодом JS:

$(function() { 

    // Namespace 
    jQuery.icisBoard = {}; 

}); 

Я тогда функцию подсказки, которая происходит после того, как это в отдельный файл JS:

// Tooltip function 
$(function() { 

    $('.w_market_updates ul li a:contains("...")').addClass('tip_holder'); 

    $(".tip_holder").hover(function() { 

     var $containerWidth = $(this).width(); 

     var $offset = $(this).offset(); 

     $.icisBoard.$thisTitle = $(this).attr('title'); 

     $('#icis_dashboard').prepend('<div id="tooltip">' + $thisTitle + '</div>'); 

     $(this).attr('title', '')   

     var $tipWidth = $('#tooltip').width(); 

     var $tipHeight = $('#tooltip').height(); 

     $('#tooltip').css({ 
      'display': 'block', 
      'position': 'absolute', 
      'top': $offset.top - ($tipHeight + 5), 
      'left': $offset.left - ($tipWidth - $containerWidth)/2 
     }); 

    }, function() { 

     $('#tooltip').remove(); 

     $(this).attr('title', $.icisBoard.$thisTitle) 

    }); 


}); 

Это не работает для меня, поскольку вы знаете, что функция зависания не работает. Я все делаю неправильно? Я даже не уверен, что переменная доступна для глобальной области в любом случае в этом случае, и если у меня только $thisTitle вместо $.icisBoard.$thisTitle, то функция работает.

+0

ли вы получаете какие-либо сообщения об ошибках? –

+0

№ Странно, потому что, если я объявляю переменную с префиксом «var», она, похоже, не доступна для зависания части функциональности. – RyanP13

ответ

1

Изменить эту строку:

$('#icis_dashboard').prepend('<div id="tooltip">' + $thisTitle + '</div>'); 

в

$('#icis_dashboard').prepend('<div id="tooltip">' + $.icisBoard.$thisTitle + '</div>'); 

Вы не имеют переменную $thisTitle.

Смотрите здесь: http://jsfiddle.net/qna7W/

(я изменил его немного, иначе подсказка не была бы в представлении)

+0

Спасибо. Извините, что мои глаза остеклены над этим. Есть ли способ расширить глобальный объект. Например, если я хотел иметь несколько глобальных переменных под функцией Tooltip, например. $ .icisBoard.tooltip. $ ThisTitle – RyanP13

+1

@ RyanP13: Конечно, вам просто нужно назначить объект '$ .icisBoard.tooltip', т. Е.' $ .icisBoard.tooltip = {} '. Еще одно замечание: вы не должны * добавлять это «пространство имен» к объекту jQuery. Вы можете просто создать глобальную переменную 'icisBoard'. –

Смежные вопросы